最近看叶老师写的一本基于java的数据结构,提到了几个问题,原来的理解不够全面,来补充一下。
今天就来说一下我们常提到但是却不知道是啥的Classpath:
Classpath是JVM用到的一个环境变量,它用来指示JVM如何搜索class
因为Java是编译型语言,源码文件是.java,而编译后的.class文件才是真正可以被JVM执行的字节码。因此,JVM需要知道,如果要加载一个a.b.c.Hello的类,应该去哪搜索对应的Hello.class文件。
所以,classpath就是一组目录的集合,它设置的搜索路径与操作系统相关。例如,在Windows系统上,用;分隔,带空格的目录用""括起来,可能长这样:
C:\work\project\bin;C:\shared;"D:\data\project1\bin"
现在我们假设classpath是.;C:\work\project1\bin;C:\data,当JVM在加载abc.xyz.Hello这个类时,会依次查找:\a\b\c\Hello.class
C:\work\project\bin\a\b\c\Hello.class
C:\data\a\b\c\Hello.class
classpath的设定方法有两种:
在系统环境变量中设置classpath环境变量,不推荐;
在启动JVM时设置classpath变量,推荐。
我们强烈不推荐在系统环境变量中设置classpath,那样会污染整个系统环境。在启动JVM时设置classpath才是推荐的做法。实际上就是给java命令传入-classpath或-cp参数:
java -classpath .;C:\work\project\bin;C:\shared a.b.c.Hello
没有设置系统环境变量,也没有传入-cp参数,那么JVM默认的classpath为.,即当前目录