在E盘下新建一个文件夹a,a下有两个文件夹b和c。目录结构为:
a---
--b
--c
在b目录下建立java文件B.java,其代码如下:
package b; import c.C; public class B{ public static void main(String args[]){ Cc = new C(); c.disp(); } }
在c目录下,新建java文件C.java,其代码如下:
package c; public class C{ public void disp(){ System.out.println("hello~"); } }
现在如果我们要在命令提示符下利用javac和java命令进行编译和运行:
首先,进入到a-->b目录下,输入javac B.java,会出现如下错误:
可以看到缺少关于C类的信息,会不会是因为C.java没有编译的原因呢?因为在B类中引用了C类的信息,所以我们先把C.java编译了,进入到a-->c目录,输入javac C.java,得到如下信息:
可见编译通过了,在返回到b目录下,重新输入javac B.java命令,得到:
还是不可以,现在想一下,由于我们是在b目录下进行执行的javac命令,而b目录下是没有关于C类的信息的,我们应该返回到B类的上层目录进行编译才对,所以进入a目录下,重新执行命令,得到:
还是有错误,这是因为javac命令不识别这样的带有包标注的b.B.java参数,我们改变方式:
可见,这回是编译通过了,点号表示当前目录,加上b目录,就可以定位到B.java了,而且可以自动关联到C类,捎带着把C先编译了。
现在运行一下,依然在a目录下,输入java .\b\B 得到:
现在又找不到类了,看来是输入的有问题,无法定位到B类。现在改变输入方式,去掉.\b,因为这个时候需要带着B的包名才可以,记得此时B类已经编译结束了,所有的信息都在B的class文件中了,输入javab.B,得到:
这回成功了!
可见,在javac命令执行的时候,需要到类的父目录去运行,同样,java命令也是必须到类的根目录去运行,这样才能把其他引用到的或者相关的类包含进来,在运行java命令的时候还要注意不要忘记类的包名~
写完收工,饭去~