path
在windows中有一个环境变量,名字为path
在DOS命令窗口下的命令 如ipconfig 实际上都是一些exe文件,之所以输入ipconfig就可以运行,是因为path中包含了ipconfig.exe的路径,输入ipconfig+回车即可在对应路径下查找到ipconfig.exe并运行它。
所以要想直接在DOS命令窗口下使用javac来直接编译源代码,则必须在path中写入javac.exe的路径
classpath
首先看一下Java HelloWorld 命令的运行过程
第一步:会先启动JVM
第二步:JVM启动之后,JVM会去启动类加载器classloader。类加载器的作用是加载类,本质上是去硬盘上找相应的字节码文件,
第三步:如果对应的字节码不存在则报错,存在的话,类加载器则会将字节码文件加载到JVM里,由解释器将字节码解释为二进制信息,由操作系统实行与硬件的交互。
总体来说就是JVM ------》类加载器 -------》解释器-------》操作系统
类加载器默认是在当前目录下找字节码文件
那么能不能给类加载器指定一个路径,让类加载器去制顶的路径下查找字节码文件呢?
答案是可以!但是我们需要设置一个环境变量,叫做:classpath!
classpath环境变量是java特有的。classpath=A路径;B路径;C路径.......
classpath是一个变量名,
A路径;B路径;C路径;.....是变量值
这里注意一点:配置了classpath之后,类加载器只会去配置的目录下找字节码文件。
拓展:
JDK自带了三个类加载器
启动类加载器
去C:\Program Files\Java\jdk1.8.0_131\jre\lib\rt.jar下加载类
rt.jar中都是JDK最核心的类库
扩展类加载器
去C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\*.jar下加载全部jar文件
应用类加载器
去classpath寻找类加载
java中为了保证类加载的安全,使用了双亲委派机制:优先从启动类加载器中加载,这个称为“父”,再从拓展类中加载,这个称为”母“。双亲委派,如果都加载不到才会考虑从应用类加载器中加载。直到加载到为止