Linux下用命令行编译运行Java总结

最近使用腾讯云的Cloud Studio写Java,只能使用命令行进行编译运行,趁此机会,学习一下Linux的一些常用命令。平时windows下IDE用习惯了,现在用命令行进行编译运行,发现其实问题还是挺多的,所以写下这篇文章。


1.javac命令行

javac用于编译java源文件,生成.class文件。形式如下

javac [option] source

常用的option选项有如下

-classpath <路径>(可以简写成 -cp):指定要使用的类路径或要使用的jar包的路径。

-d <路径>:指定源文件编译后生成的.class文件的存放位置。


2.java命令行

java用于运行生成的.class文件。形式如下

java [option] classname [arguments]

常用的option选项有如下

-classpath <路径>(可以简写成 -cp):指定要使用的类路径或要使用的jar包的路径。

[arguments]:传递给main函数的参数。


3.编译运行一个单独的Java文件

在test文件夹下有一个Test.java文件,结构如下
这里写图片描述
Test.java代码如下

public class Test { 
    public static void main(String[] args) { 
        System.out.println("Hello World!"); 
    }
}

(1)编译生成的.class文件在当前文件夹下

// 编译
javac Test.java
// 运行
java Test
// 输出
Hello World!

(2)也可以指定编译生成的.class文件的路径,比如生成在当前文件夹下的bin文件夹下

// 编译
javac -d ./bin Test.java
// 运行
java -cp ./bin Test
// 输出
Hello World!

当指定生成的目录后,运行时也得指定相应的目录,不然会找不到文件。
这里写图片描述


4.编译运行一个带包的java文件

这里写图片描述
Test.java代码如下

package com.codeliu;
public class Test { 
    public static void main(String[] args) { 
        System.out.println("Hello World!"); 
    } 
}

(1)编译生成的.class文件在当前文件夹下

// 首先得进入到.java文件所在的文件加下,再进行编译
javac Test.java
// 退出到最外层包,再运行,否则找不到文件
java com.codeliu.Test
// 输出
Hello World!

对于在包下的文件,如果编译后直接运行,会找不到文件,必须得退出到最外层包,然后使用完整的包名+文件名进行运行。
这里写图片描述
(2)指定.class文件的生成路径,使用IDE自动编译的时候,我们可以看到源文件一般在src文件夹下,而.class文件在bin文件夹下,这是因为JVM指定了.class文件的路径。

// 编译,生成在与最外层包同级的bin文件夹下,首先退出到最外层包
javac -d ./bin com/codeliu/*
// 运行(windows中把:改成;),-cp表示告诉jvm去该路径下寻找文件
java -cp bin: com.codeliu.Test
// 输出
Hello World!

这里写图片描述


5.同一个包下,一个类调用另一个类

这里写图片描述
在同一个包下有Test01.java和Test02.java,代码如下

package com.codeliu;
public class Test01 { 
    public void print() { 
        System.out.println("I'm Test01"); 
    }
}
package com.codeliu;
public class Test02 { 
    public static void main(String[] args) { 
        Test01 t = new Test01(); t.print(); 
    }
}

因为Test02引用了Test01,所以我们得先编译Test01,再编译Test02。

// 编译Test01.java,生成的.class文件在当前文件夹下,首先得进入到文件所在的文件夹下,然后进行编译
javac Test01.java
// 退出到包的最外层,然后编译Test02.java
javac -cp . com/codeliu/Test02.java
// 运行Test02.java
java com.codeliu.Test02
// 输出
I'm Test01

编译Test02的时候,我们使用-cp告诉编译器在当前路径下(.)去寻找Test01.class。

当然,我们也可以指定.class生成的路径,使用-d即可。
这里写图片描述


6.一个包中的类调用另一个包中的类

文件目录结构如下
这里写图片描述
在package1包下有类Test01.java,package2包下有Test02.java。代码分别如下

package com.package1;
public class Test01 { 
    public void print() { 
        System.out.println("I'm Test01"); 
    }
}
package com.package2;
import com.package1.Test01;
public class Test02 { 
    public static void main(String[] args) { 
        Test01 t = new Test01(); 
        t.print(); 
    }
}

还是同样,得先编译Test01.java。

// 编译Test01.java,指定生成的路径是test文件夹下的bin文件夹下
javac -d ./bin com/package1/*
// 编译Test02.java,-cp告诉编译器去当前文件夹下的bin文件夹下找Test01.class,-d指定生成的路径
javac -cp bin: -d ./bin com/package2/*
// 运行Test02
java -cp bin: com.package2.Test02
// 输出
I'm Test01

这里写图片描述


7.运行一个工程

我们平时的项目肯定不可能是这么简单的,肯定有好多包和以及jar包,这样的情况下,我们使用shell脚本去编译它们。

等下吃完饭举个栗子。



温饱思淫欲,吃饱了我就不想写了。暂时先不写了,俺得学习其他的知识了。

个人网站https://www.codeliu.com,欢迎各位志同道合的盆友!

猜你喜欢

转载自blog.csdn.net/a_helloword/article/details/80285012