写在前面
对于习惯了使用ide的我们似乎早已经忘记了如何通过命令行来编译和运行java类了,至少我是这样的,本文就一起来回顾下吧!
1:运行不带包的类
这种相信大多数朋友都记得,直接javac yourCode.java,然后java yourCode.class就行了,如下源码:
//package javadeveloper.mkmoney;
public class TestByte {
public static void main(String[] args) {
TestByte testByte = new TestByte();
System.out.println(testByte);
}
}
则如下编译和运行:
bogon:temp xb$ javac TestByte.java
bogon:temp xb$ java TestByte
TestByte@6073f712
注意java命令运行时不要带.class,否则就会变为.class.class,会找不到文件,
但是当我们通过package xxx.yyy
给类指定了包之后有怎么样编译和运行呢?接着来看下。
2:运行带包的类
定义如下:
package javadeveloper.mkmoney;
public class TestByte {
public static void main(String[] args) {
TestByte testByte = new TestByte();
System.out.println(testByte + "111");
}
}
编译有两种方式,类在文件夹javadeveloper/mkmoney
中,以及不在两种情况,分别看下。
2.1:在package对应的文件夹中
如下图:
通过如下方式编译:
bogon:temp xb$ javac javadeveloper/mkmoney/TestByte.java
运行后会在javadeveloper/mkmoney
文件夹下生成对应的字节码文件,如下图:
通过如下两种方式运行:
bogon:temp xb$ java javadeveloper/mkmoney/TestByte
javadeveloper.mkmoney.TestByte@5f150435111
OR
bogon:temp xb$ java javadeveloper.mkmoney.TestByte
javadeveloper.mkmoney.TestByte@5f150435111
注意必须在根目录执行,如下:
bogon:temp xb$ tree
.
|____javadeveloper
| |____mkmoney
| | |____TestByte.class
2.2:不在package对应的文件夹中
如下在一个随机的目录;
然后通过增加-d .
的方式来生成字节码文件,则会按照包路径生成对应的文件夹并将字节码文件放在目录中,如下:
bogon:temp xb$ javac -d . TestByte.java
bogon:temp xb$ tree
.
|____javadeveloper
| |____mkmoney
| | |____TestByte.class
|____TestByte.java
接着我们可以通过如下的两种方式来运行:
bogon:temp xb$ java javadeveloper/mkmoney/TestByte
javadeveloper.mkmoney.TestByte@5f150435111
bogon:temp xb$ java javadeveloper.mkmoney.TestByte
javadeveloper.mkmoney.TestByte@5f150435111