文为在命令下运行java程序,有助理解Java的目录结构以及路径寻找过程。
涉及classpath 和sourcepath的使用 。classpath路径下存储的为.java文件,sourcepath下存储的为.classes文件。
其目录结构如下,其中test的绝对路径为 /开发/项目/test
首先使用javac命令将ExceptionTest.java 文件编译,但是ExceptionTest.java中依赖了ExceptionZlz.java 和Person.java,所以编译的时候要指定sourcepath 和classpath 与 -d 类文件路径,如下代码
javac -sourcepath /开发/项目/test/source -classpath /开发/项目/test/classes /开发/项目/test/ExceptionTest.java -d /开发/项目/test/classes
这个过程我理解的执行过程大概为,编译时需要用到ExceptionZlz.java 和Person.java,所以先找到classpath目录发现没有这两个类的.class类文件,于是去sourcepath目录找到了这两个类的.java源文件,将他们编译成 。class文件放在对应的classpath目录中。
其中source目录中的类文件类名与目录结构必须对应 否则会出错,如Person.java的包名为sb;ExceptionZlz.java文件的包名为sb.ssbb。这里只与source下的相对路径对应即可。
当编译之后会在classes下生成对应目录结构相同的.class 文件,其中ExceptionTest.java 的包名为package test.sb; 所以其编译过后在classes目录结构如上。这里所说包名均值在 .java文件中定义的package名称。
Javac执行完毕,下面来说运行。
运行 java -classpath /开发/项目/test/classes test.sb.ExceptionTest
因为-classpath指定了类文件目录 ,所以运行时直接指定包名加类名称就可以运行啦。
开始我考虑它jdk的类 ,其实这个不用操心,只要设置好了电脑系统的环境变量 java会自己找到它的原生类库的。
运行效果如下图。
我的ExceptionTest .java文件如下
其实这个东西还要自己去试,自己去尝试了才会思路清晰,我描述的不够清楚,这篇相当于一个小事件经历。
一些详细概念和原理可以去百度哈,像-classpath还可以设置jar 和zip文件,等等哈。