java classpath环境变量(linux配置java环境变量)

刚学Java的时候,很多jdk配置教程都要求设置JAVA_HOME、Path、CLASSPATH3个变量。而Java官网有这么一句话:jdk1.5之后的版本在安装时不用设置CLASSPATH变量。今天我就以jdk1.5为例,总结下三者的区别。Path当我们安装完jdk之后,打开cmd(在非安装目录的路径下)输入javac、java,会提示找不到命令。我们需要将命令所在的路径添加到Path系…

大家好,又见面了,我是你们的朋友全栈君。

刚学Java的时候,很多jdk配置教程都要求设置JAVA_HOME、Path、CLASSPATH3个变量。而Java官网有这么一句话:jdk1.5之后的版本在安装时不用设置CLASSPATH变量。今天我就以jdk1.5为例,总结下三者的区别。

Path

当我们安装完jdk之后,打开cmd(在非安装目录的路径下)输入javac、java,会提示找不到命令。我们需要将命令所在的路径添加到Path系统变量中,这时,系统就可以找到可执行文件了。

Windows在查找可执行文件是这样的:在终端输入java时,系统就会先在当前目录查找java程序,如果有就会执行java,否则就会在Path中指定的路径中找,因为我们在PATH配置了…\jdk\bin,系统会在这个路径下找到Java程序并执行。否则就提示找不到命令。Path的作用其实就是方便我们使用一些命令。

JAVA_HOME

JAVA_HOME里面的内容是JDK安装目录。其实不设置JAVA_HOME也是可以的,只要有Path就行了。但是设置JAVA_HOME可以方便在Path中使用、更新JDK目录。比如,jdk的安装路径是C:\jdk1.5.0_22,Path设置为C:\jdk1.5.0_22\bin,而当我们把JAVA_HOME设为C:\jdk1.5.0_22时,设置Path就可以写成%JAVA_HOME%\bin,以后当我们使用其他版本的jdk,就可以只修改JAVA_HOME的值,此外,当我们要使用Redis等组件时,也可以灵活使用JAVA_HOME做些改动。

CLASSPATH

编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件,很多配置教程都让我们设置CLASSPATH环境变量为:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar,但是其实没有必要。以jdk1.5为例,当我们配置完成后,写个HelloWorld.java。

java classpath环境变量(linux配置java环境变量)

在cmd中进入文件目录,可以发现依然可以编译、运行

java classpath环境变量(linux配置java环境变量)

再查看运行的详细信息,可以看到没有CLASSPATH的情况下rt.jar、当前目录也是可以被JVM找到的。

java classpath环境变量(linux配置java环境变量)

java classpath环境变量(linux配置java环境变量)

也就是说,在JDK 1.5之后,完全可以不配置这个变量。不配置CLASSPATH,JRE会自动搜索当前路径下的类文件。编译、运行时,系统可以自动加载dt.jar和tools.jar文件中的Java类。
  当然,使用JDK 1.5以上的版本也可以在属性配置CLASSPATH环境变量,一旦设置了该变量,JRE就会按照该变量指定的路径搜索Java类(如果CLASSPATH中不包括当前路径.,JRE就不会在当前路径下搜索Java类)。这种方法是一劳永逸的,当我们只是想临时运行某些类,我们就可以将它们临时加到CLASSPATH中(cmd已关闭,就没了)。如下面所示:

返回父目录,毫无疑问父目录没有HelloWorld.class文件,所以运行时找不到主类。这是因为JVM只会在当前目录、dt.jar、tools.jar中找class文件,而找不到当前目录的子目录中的class文件。

java classpath环境变量(linux配置java环境变量)

解决方法是(1)将当前目录的子目录用set命令临时添加到CLASSPATH中(只在当前窗口生效),这时就可以运行了:

java classpath环境变量(linux配置java环境变量)

(2)此外想在运行Java程序时临时指定JRE搜索Java类的路径,也可以使用-classpath(-cp)选项,如下面的格式。(dir是要指定的路径名)

java -classpath dir 类名

java classpath环境变量(linux配置java环境变量)

java classpath环境变量(linux配置java环境变量)

对于第二种方法,有个注意的点:采用这种方法会先在classpath中查找class文件,即时当前目录有class也有可能找不到,如下所示:新建名为1的一个空文件夹,进入helloworld文件夹,尽管helloworld里面有class文件也没法识别到。

java classpath环境变量(linux配置java环境变量)

java classpath环境变量(linux配置java环境变量)

也就是说,使用了-classpath选项后,JRE将严格按-classpath指定的路径来搜索Java类。如果想使CLASSPATH环境变量指定的路径还生效,可以按下面的格式来运行Java程序。

java -classpath %CLASSPATH%;.;dir 类名

java classpath环境变量(linux配置java环境变量)

 

小结:

1、 path环境变量是先在当前目录找执行程序,如果没有,再到path指定目录中去寻找。而classpath是先在classpath环境变量中去找执行程序,找到了,即使当前目录中有同样的执行程序也执行不到;且只要在classpath的值后面加了英文句号才会当前目录中来寻找执行程序。为了方便,以后尽量用set CLASSPATH,而不要使用-classpath的选项。

2、 在设置临时变量时,如果想保留原有的path值,只需在新设的值后面加上%path%这样的语句就行了。如:set path=新路径;%path%;

3、 在使用javac和java进行编译和执行程序时,如果出现找不到文件的情况,在环境变量设置正确的前提下,只有两种可能:一是目录错误;二是文件名错误。

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128737.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • zyltdlhr

    zyltdlhr

  • 51单片机八路抢答器proteus仿真

    51单片机八路抢答器proteus仿真51单片机八路抢答器由于51单片机小板,按键比较少,还有一些功能上的缺陷,所以说无法完成八路抢答器,所以我们用proteus仿真,代码与实验结果如下:/********************************Function: 八路抢答器Date: Sep20,2017By:Third GroupBolancheL************

    2022年10月20日
  • navicat12注册机生成相应注册码

    navicat12注册机生成相应注册码转自:http://blog.sina.com.cn/s/blog_1885d23df0102yjw9.html navicat注册机是针对nacicat公司开发的软件而制作的一款激活工具,能够生成相对应的注册码和激活码,不仅能够支持激活nacicat11系列软件,同时可以激活nacicat12系列软件,具体可以激活navicat12formysql、navicat12fo…

    2022年10月13日
  • 2021年顶级编程语言名单出炉,SQL位居榜首,Java、Python紧随其后

    2021年顶级编程语言名单出炉,SQL位居榜首,Java、Python紧随其后不同的编程语言会对我们的求职产生相当大的影响,但是目前哪种编程语言最受公司欢迎呢?EmsiBurningGlass收集并分析了数百万个招聘信息,qizhon给SQL位居榜首,Java位列第二,Python排名第三。

  • 怎么画等距线_十字线画法

    怎么画等距线_十字线画法 等距线的画法本文作者徐庆荣(武汉大学) 等距线画法可分为栅格(光栅)方式和矢量方式二种。栅格方式一般采用“距离变换”等算子实现,算法简练,但在不同方向上的等距线可能不严格等距。矢量方式是按几何关系通过坐标计算获得等距线位置,算法复杂,但精度高。本文介绍的是矢量方式的等距线画法。1.      概述简言之,等距线是指与已知线条(折线或曲线)等距的线条。等距线的应用甚广,例如

  • [c0,s0] = wavedec2(M1, N, wtype);「建议收藏」

    [c0,s0] = wavedec2(M1, N, wtype);「建议收藏」采用小波分解行clear;X1=imread(‘20170901204704.jpg’);imshow(X1);figure;X2=imread(‘20170901204704_副本.jpg’);M1=double(X1)/256;imshow(M1);M2=double(X2)/256;N=4;wtype=’sym4′;[c0,s0]=wavedec2(M1,N,wtype);

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号