关于Java代码的编译与运行和java与javac命令的使用
Java的编译和运行
Java编译器将源文件(.java)编译成字节码文件(.class),Java虚拟机(JVM)运行字节码文件。

1. 对于无包,且未import其他类的源文件,直接在java文件所在目录执行javac B.java即可在当前目录下编译得到class文件,在当前目录下java B即可运行该字节码文件。


2. 对于有包,且未import其他类的源文件,直接在java文件所在目录执行javac B.java即可在当前目录下得到class文件,但是执行java B将会报错


原因
因为 B 在sjw/com这个包中,因此需要输入完整的类名sjw.com.B

然而仍然报错,这是因为java命令默认是在当前目录下执行,当前目录即...\sjw\com,拼接上类名后得到...\sjw\com\sjw\com\B,因此找不到该类,此时需要切换类路径:

这样就可以正常的运行字节码文件。
3. 对于有包且引用了其他类的源文件,使用javac B.java,发生错误



原因:
Java在编译B.java时,编译器发现使用了A类,因此编译器会先查看Java API中是否有这个类A,发现没有。编译器转而查看import列表,将列表中的项与A组合成A的完整类名。即sjw.A(只有一个import语句)。然后编译器会去类路径下查找这个类,因为没有指定类路径,默认的类路径是当前目录,而在当前目录下是无法找到A类的,因此报错,如果找到了多个类文件,同样会报错。编译器找到文件后还会将他与已经存在的class文件比较,若源文件比class文件要新,就会重新编译该源文件。因此想要正确的编译B,应该指定正确classpath:

接着通过java命令运行 
值得注意的是,此时也需要指出A类的class文件的路径,因为编译器会查找类路径\sjw\A若未找到,则会报错。

浙公网安备 33010602011771号