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%libdt.jar;%JAVA_HOME%libtools.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;;dirN Java类
多个路径之间在windows平台上以分号(;)隔开, 在Linux平台上则以冒号(:)隔开
java -classpath C:Users15046DesktopTestcomduantest5_1 HelloWorld
(注意, 最后的Java类名和前面的路径之间有空格)
6) 对于简单的程序如HelloWorld可以直接运行, 可是对于有继承, 包等关系的自定义类怎么运行呢?
一般我们有这些关系的java文件在编译的时候, class文件就要放在对应的包结构中, 我们则需要把包所在父路径添加到CLASSPATH环境变量中, 在调用的时候, 要将他们作为整体来调用(如何编译有package等关键字的源文件详细内容可以看我上一篇如何运行有 package 语句的源文件)
除了临时添加环境变量, 也可以在CLASSPATH环境添加永久变量 C:Users15046DesktopTest;
java st5_1.Test
Java在运行class文件时, JRE到 C:Users15046DesktopTest; 路径下找 class 文件运行, 因此相当于我们在计算机的任意位置进入cmd都能直接执行此路径下的class文件,比如我们在CLASSPATH环境变量下添加 C:Users15046Desktop; 变量, 那么我们即使在D盘也能直接运行在桌面上的 java HelloWorld.class 文件了
我自定义的类如下(不看也无所谓, 就是Test类和Person类处在同一个包下, Person继承类在另一个子包下, Test调用到和两个类都相关的内容)
Person类
package st5_1;public class Person {private String name;private String gender;public Person(String name, String gender) {this.name = der = gender;}public Person() {}public void eat() {System.out.println("吃东西");}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {der = gender;}
}
Teacher类是Person类的子类
package st5_2; // 和父类Person在不同的子包中import st5_1.Person; // 因此需要导入其他包public class Teacher extends Person {private String id;public Teacher(String name, String gender, String id) {super(name, gender);this.id = id;}public Teacher(String id) {this.id = id;}public Teacher() {}public void teach() {System.out.println("教学");}public String getId() {return id;}public void setId(String id) {this.id = id;}
}
测试类
package st5_1;import st5_2.Teacher; // 因为Teacher类在另一个包里, 与Test不再同一包下, 因此需要导入才能使用public class Test {public static void main(String[] args) {Person person = new Teacher("段", "男", "d12345");System.out.println(person);}
}
歌曲分享, 适敲代码
歌曲 : 天地孤影任我行
歌手 : 陈勋奇
本文发布于:2024-01-30 21:50:59,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170662266223071.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |