1) 如果使用1.5以上版本的JDK, 完全可以不用设置CLASSPATH环境变量
即使不设置CLASSPATH环境变量, 完全可以正常编译和运行Java程序
2) 那么CLASSPATH环境变量的作用是什么呢?
当使用"java Java类名"命令来运行Java程序时, JRE到那里去搜索Java类呢? 1.5版本之后, 会默认在当前路径;但是1.4版本之前版本的JDK, 则需要在CLASSPATH环境变量中添加点(.), 来告诉JRE需要在当前路径下搜索Java类
3) 除此之外, 编译和运行Java程序还需要JDK的lib路径下dt.jar 和 tools.jar 文件中的Java类, 因此还需要这两个文件添加CLASSPATH环境变量里
tools.jar 是系统用来编译一个类的时候用到的,即执行javac的时候用到
dt.jar是关于运行环境的类库,主要是swing的包 在用到swing时最好加上。(应该是因为我用的是JDK8的原因, 即使是不添加这两个包的也能正常编译运行)
JDK11的lib目录已经不再包含 dt.jar 和 tools.jar文件
4) 使用1.4以前版本的JDK来编译和运行Java程序, 常常需要设CLASSPATH环境变量的值为
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
(其中%JAVA_HOME%代表JDK的安装目录)
win7 和 win10 有区别 win10为了安全性, 已经把每个位置都分开了, 不用再这么写了(但其实win10有时候在点开的时候, 即使变量很多也依然会出现同win7这样全在一行的不确定情况)
5) 使用1.5以上版本的JDK, 也可以设置CLASSPATH环境变量(通常用于加载第三方类库或者自定义类),
一旦设置了该环境变量, JRE 将会按环境变量指定的路径来搜索 Java 类. 这意味着如果添加CLASSPATH环境变量, 务必在该环境变量值中包含点(.), 用于表示当前路径
如果想在运行 Java 程序时临时指定 JRE 搜索 Java 类的路径, 则可以使用 -classpath 选项(或用-cp缩写)
java -classpath dir1;dir2;dir3...;dirN Java类
多个路径之间在windows平台上以分号(;)隔开, 在Linux平台上则以冒号(:)隔开
java -classpath C:\Users\15046\Desktop\Test\com\duan\test5_1 HelloWorld
(注意, 最后的Java类名和前面的路径之间有空格)
6) 对于简单的程序如HelloWorld可以直接运行, 可是对于有继承, 包等关系的自定义类怎么运行呢?
一般我们有这些关系的java文件在编译的时候, class文件就要放在对应的包结构中, 我们则需要把包所在父路径添加到CLASSPATH环境变量中, 在调用的时候, 要将他们作为整体来调用(如何编译有package等关键字的源文件详细内容可以看我上一篇如何运行有 package 语句的源文件)
除了临时添加环境变量, 也可以在CLASSPATH环境添加永久变量 C:\Users\15046\Desktop\Test;
java com.duan.test5_1.Test
Java在运行class文件时, JRE到 C:\Users\15046\Desktop\Test; 路径下找 class 文件运行, 因此相当于我们在计算机的任意位置进入cmd都能直接执行此路径下的