课时8:CLASSPATH环境属性
我们来看一下 CLASSPATH 环境属性,这是一个重要的话题。CLASSPATH 如果要完整的进行解释需要好多的知识。所以本次只是对 CLASSPATH 的概念做出一个先期的介绍。
例如,现在假设在d:\mldnjava 目录下提供有一个 Hello.class 字节码文件;
假设说当前用户所在的目录为” d:\mldnjava ”,那么在这样的情况下可以直接使用 Java 命令进行 Hello.class 字节码文件的解释。但是如果说现在脱离了这个目录,将当前目录修改为“ C :\”( C 盘目录下并没有 Hello.class 字节码文件) ,如果再次执行程序解释,这个时候会出现如下的错误提示信息:
错误:找不到或无法加载主类Hello 原因:java.lang.ClassNotFoundException:Hello
这个错误提示在 Java 1.8中无法看到,但在1.9中可以,这是为什么呢?因为从1.6版本开始, Java 支持多国语言版本,它会根据当前系统的语言环境自动显示中文或英文。在1.8中,只能看到部分提示;而在1.9中,可以看到完整的提示。因此,请大家先记住第一个单词“ ClassNotFoundException ”。
因为当前目录中没有字节码,那么现在的需求就是:可以在不同的目录中都执行d:\mldnjava\ Hello.class文件。所以在这样的处理要求下,我们就只能够依靠CLASSPATH环境属性来完成。
范例:定义CLASSPATH环境属性
SET CLASSPATH = d:\mldnjava
当设置了 CLASSPATH 之后,这个时候在 Java 程序解释的时候会自动的通过 CLASSPATH 所设置的路径进行类的加载的,所以可以得出一个结论: JVM 解释程序的时候需要得到 CLASSPATH 的支持。
但是有一个问题,发现默认情况下所有解释的类都是从当前所在的目录中加载的,所以可以得出一个结论:CLASSPATH 的默认设置为当前所在目录加载类文件。
很明显如果到处去设置 CLASSPATH 就会造成整个系统操作的混乱,那么从正常的角度来讲,对于CLASSPATH 还是应该采用默认设置方式。所以如果这个时候要想只通过当前目录加载,则可以将 CLASSPATH 设置为“.”。
范例:从当前所在路径加载类
SET CLASSPATH =.
在一些时候如果你安装了一些与 Java 开发的程序软件的时候,它有可能会自动的修改默认的CLASSPATH,也就是说这个”.”的配置会消失。这种情况下就必须利用命令自己重新设置回来。
但是需要注意的是,现在CLASSPATH是在一个命令行下的配置,如果该命令行关闭了,那么相关的属性配置也将消失,以最好的做法是将其定义为全局属性,则可以直接在系统中追加有一个属性信息。
之前我们已经配置过相关属性,在相同的位置,可以新建一个CLASSPATH,并在其后添加一个“.”。这是最佳的做法。
面试题:
请问PATH和CLASSPATH区别?
l PATH:是操作系统提供的路径配置,定义所有可执行程序的路径;
l CLASSPATH:是由JRE提供的,用于定义Java程序解释时类加载路径,默认设置的为当前所在目录加载,可以通过“ SET CLASSPATH =路径”命令形式来进行定义;
逻辑关系:JVM → CLASSPATH定义的路径→加载字节码文件。
所以CLASSPATH是Java定义的环境属性,是在Java程序解释的时候使用的。