【待解决】关于CLASSPATH的显示问题

CLASSPATH? 环境变量?

环境变量CLASSPATH是操作系统JVM的搜索路径,它可以让JVM依据这些路径找到可执行文件.class文件,就相当于环境变量PATH对操作系统windows的作用一样。

既然如此,那么我们能不能读到CLASSPATH中的那些路径?

先看看我们是怎么读到环境变量PATH的:

  • 第一种方法

在cmd中输入echo %PATH%

  • 第二种方法

在计算机右键属性->高级系统设置->系统属性->环境变量里查看,PATH在用户变量和系统变量里都有显示,可以双击查看具体路径(环境变量的实现是以“系统环境变量再‘附加’用户环境变量”的形式进行的)。

再试试能不能按照我们读取PATH的方法读取CLASSPATH

  • 第一种方法尝试

在cmd中输入echo %CLASSPATH%

结果原样照映出%CLASSPATH%

  • 第二种方法尝试

在计算机右键属性->高级系统设置->系统属性->环境变量里查看

结果:没有查找到环境变量CLASSPATH

那到底环境变量CLASSPATH存不存在呢?

  • 资料上的那些蛛丝马迹
  1. JVM预设的CLASSPATH就是读取目前文件夹中的.class,如果自行指定CLASSPATH,则以你指定的为主

这说明CLASSPATH里的内容是.(当前目录)?还是如果CLASSPATH内容为空,则默认CLASSPATH读取当前目录下的.class?

  1. CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。(网址:环境变量path和classpath的作用是什么?)

这说明了CLASSPATH里面没有内容,需得自己添加了以后才有么?

  1. 书上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里就有.)

原文地址:https://www.cnblogs.com/protectmonarch/p/6491946.html