设置CLASSPATH的目的是让Java执行环境找到指定的Java程序(也就是.class文件)
Java程序如何找到并引用所需要的类?
1.利用环境变量CLASSPATH。CLASSPATH中定义了很多根目录。运行程序时Java解释器只从这些根目录开始查找一个Java程序用到的类,即根目录和import指出的子目录 。例如,需要从当前目录查找,则需要加入"."。
2.可以把包中的所有.class文件打包为一个jar文件,然后在CLASSPATH中加入该文件的路径。
关于打包:
例如我现在C:\myproj\classes\X\Y下有A.class和B.class,我要打包(内部包含子目录信息)成food.jar
就要这样写:
这样,food.jar就会生成在C:\myproj\classes\下
当java程序中要用到A类的时候可以import X.Y.A
CLASSPATH的设置就是C:\myproj\classes\food.jar
3.可以在编译和运行时加入classpath参数指出所需要的包和根目录:
C:>javac -classpath c:\java\PackJar\food.jar;c:\java;. PackJar.java
C:>java -classpath c:\java\PackJar\food.jar; c:\java;. PackJar
Window8下CLASSPATH的设置方法:右键计算机,点击属性,出现如下界面。
点击左边的高级系统设置
选择高级
点击右下角的环境变量
在系统变量那里找到CLASSPATH
点击编辑
我的CLASSPATH变量值设置为
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\rt.jar;C:\myproj\classes;
最前面的是.;
这个的意思是告诉Java程序找类时要先查找当前目录的.class文件
那么当前目录是指什么?
还是用一个具体的例子来说明吧!
例如我现在在C:\myproj\bin下有一个Test.java文件
内容如下:
编译:
以上例子中当前目录就是C:\myproj\bin
可以看到Test.java用到了我自己定义的类A,那它是怎么找到类A的呢?
因为我的环境变量设置了.;
所以会到当前目录找,也就是看C:\myproj\bin目录下有没有直接有一个A.class。
我的A.class没有放在那个目录下,所以必定是没有的。
然后它还会去找,看看是不是系统类等等。
也必定不是。
最后可以看到我还设置了一个路径C:\myproj\classes;
所以会到C:\myproj\classes下看有没有A.class,这时候就找到了A.class。
其实A.class的路径是C:\myproj\classes\X\Y\A.class
找到的原因是我在Test.java里写了import X.Y.*,(导入该目录下的所有类)这个和CLASSPATH的根目录C:\myproj\classes;合起来就可以找到类A了。
另外,也可以写成import X.Y.A
感谢所有让我明白CLASSPATH的你们