CLASSPATH? 环境变量?
环境变量CLASSPATH是操作系统JVM的搜索路径,它可以让JVM依据这些路径找到可执行文件.class文件,就相当于环境变量PATH对操作系统windows的作用一样。
既然如此,那么我们能不能读到CLASSPATH中的那些路径?
先看看我们是怎么读到环境变量PATH的:
- 第一种方法
在cmd中输入echo %PATH%
- 第二种方法
在计算机右键属性->高级系统设置->系统属性->环境变量里查看,PATH在用户变量和系统变量里都有显示,可以双击查看具体路径(环境变量的实现是以“系统环境变量再‘附加’用户环境变量”的形式进行的)。
再试试能不能按照我们读取PATH的方法读取CLASSPATH
- 第一种方法尝试
在cmd中输入echo %CLASSPATH%
结果原样照映出%CLASSPATH%
- 第二种方法尝试
在计算机右键属性->高级系统设置->系统属性->环境变量里查看
结果:没有查找到环境变量CLASSPATH
那到底环境变量CLASSPATH存不存在呢?
- 资料上的那些蛛丝马迹
-
JVM预设的CLASSPATH就是读取目前文件夹中的.class,如果自行指定CLASSPATH,则以你指定的为主
这说明CLASSPATH里的内容是.(当前目录)?还是如果CLASSPATH内容为空,则默认CLASSPATH读取当前目录下的.class?
-
CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。(网址:环境变量path和classpath的作用是什么?)
这说明了CLASSPATH里面没有内容,需得自己添加了以后才有么?
- 书上P34使用
javac -verbose -sourcepath src -d classes srd/main.java
时,对结果截图的描述:
然后搜索CLASSPATH中是否有已编译的类位码。你可以发现,其实默认搜索位码的路径包括许多默认的JAR文档,像是rt.jar等。留意最后那个“.”,由于没有指定-classpath(-cp),默认会搜索目前路径。
(而在后面指定了-cp是classes后,最后的那个“.”变为了classes)
结合截图可以说明,图2.20中CLASSPATH显示的路径只有两类,一类是JAR文档,一类是当前目录.
而后又在这一小节的提示里提示到
“JVM默认的类搜索路径,也就是JAR文档的搜索路径...(这)与类加载器有关”
而又由前面可以得知,JAR文档的搜索路径在CLASSPATH里,所以提示里的这句话是告诉我们想要查找到CLASSPATH究竟在哪可以看到内容,得先理解类加载器、JVM默认等概念么?
(问题等待解答)
当前猜测
预设的CLASSPATH里存在两类路径,一类是默认的JAR文档,一类是当前目录路径。
或许能在JVM里用某个方法把CLASSPATH里的内容显示出来。
主要疑惑
CLASSPATH在哪可以看到它的内容呢?(能明确指出它就是CLASSPATH,里面有内容,能对其进行修改)
附:发现CLASSPATH的一个特点
若用-cp指定了某个目录,则在该命令行执行过程中这个目录会暂时加到CLASSPATH里路径的最后面。如果没有指定则将当前目录(.)加到CLASSPATH路径后面(猜测是一开始CLASSPATH里就有.)