Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 329|回复: 0

Java环境变量配置&解决版本不一致问题

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 757 天

    [LV.10]以坛为家III

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    707886
    发表于 2021-7-21 11:34:04 | 显示全部楼层 |阅读模式

    之前用Myeclipse编译运行Java没有问题

    但是突然想用简单点的NotePad++以及cmd直接编译运行Java

    这就让我倒腾了一晚上

    先说下问题的解决,再总结下查阅的一些知识。

     

    1.进行win8下Java环境变量配置,在"系统变量"下进行如下配置:

    (1)新建->变量名:JAVA_HOME变量值:C:\Program Files\Java\jdk1.8.0_05(这只是我的JDK安装路径)

    (2)编辑->变量名:Path在变量值的后面加上:;%JAVA_HOME%\jre\bin;%JAVA_HOME%\bin;

    (3)新建->变量名:CLASSPATH变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar(注意最前面有个".")

    2.测试下环境变量是否设置成功:按“WIN”键+R”键,分别输入java,javac,java -version 命令

     

    问题1:‘javac’不是内部命令或外部命令,也不是可运行的程序或批处理。

    解决:ClASSPATH中,当前目录“.”也必须加入到该变量中。"classpath",该变量的含义为java加载类(bin or lib)的路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的,因此不能忘了"."。

     

    注:如果将环境变量修改好了之后,仍出现上述问题,那么可能是cmd更新不一致的问题,在别处看到关闭Cmd窗口,重新打开就好了,但是我是再重启一次电脑之后才好~~

    问题2:解决了问题1之后,对与HelloWord.java 输入javac HelloWorld之后出现 UnsupportedClassVersionError 错误:

    HelloWorld Exception in thread "main" java.lang.UnsupportedClassVersionError:

     HelloWorld : Unsupported major .minor version 52.0         

    at java.lang.ClassLoader.defineClass1(Native Method)        

    at java.lang.ClassLoader.defineClass(Unknown Source)         

    at java.security.SecureClassLoader.defineClass(Unknown Source)        

    。。。。

     

    这个很明显是一个版本不支持的问题,经过搜索发现问题所在:

    出现java.lang.UnsupportedClassVersionError 错误的原因,是因为我们使用高版本的JDK编译的Java class文件试图在较低版本的JVM上运行,所报的错误。

    因为,高版本的JDK生成的class文件使用的格式,可能与低版本的JDK的.class文件格式不同。这样,低版本的JVM无法解释执行这个.class文件,会抛出java.lang.UnsupportedClassVersionError不支持的Class版本错误。

    分别输入java -version 和javac -version

    果然,java版本是1.7而javac版本是1.8(o(╯□╰)o但是我的JDK明明是1.8的哇~~~~)

    后面的搜索问题变成了,如何解决版本不一致问题:

    在注册表中修改:HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment 改为1.8

    再次运行java -version

    给跪了哇~~~至此终于搞定~~~~

    有些原理的问题暂且还不懂 

    待以后开发~~~~!!!

    总结几个知识点吧~~

    JDK、JRE有什么区别:

    Jre   是java   runtime   environment的缩写,   是java程序的运行环境。既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦, 还有所有java类库的class文件,都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文件呢?  Java\jdk\ jre\bin\client里面是不是有一个jvm.dll呢?那就是虚拟机。

    Jdk   是java   development   kit,是java的开发工具包,里面包含了各种类库和工具。当然也包括了另外一个Jre--------Java\jre.  那么为什么要包括另外一个Jre呢?而且jdk\jre\bin同时有client和server两个文件夹下都包含一个jvm.dll。   说明是有两个虚拟机的。


    Java\jdk\bin这个bin下有各种java程序需要用到的命令,与Java\jdk\jre\bin或者Java\jre\bin的bin目录最明显的区别就是Java\jdk\bin下才有javac.exe,这一点很好理解,因为 jre只是一个运行环境而已。与开发无关,正因为如此,具备开发功能的jdk自己的jre下才会同时有client性质的jvm和server性质的 jvm, 而仅仅作为运行环境的jre下只需要client性质的jvm.dll就够了。

    我们用的java命令并不是 Java\jdk\bin目录下的而是Java\jdk\jre\bin目录下的。不信可以做一个实验,大家可以把Java\jdk\bin目录下的java.exe剪切到别的地方再运行 java程序,发现了什么?一切OK!

    如果java为了提供给大多数人使用,他们是不需要jdk做开发的,只需要jre能让java程序跑起来就可以了,那么每个客户还需要手动去设置环境变量多麻烦啊?

    所以安装jre的时候安装程序自动帮你把jre的java.exe添加到了系统变量中,因此去C:\Windows\system32下面去看看吧,发现有一个java.exe。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-7-5 02:34 , Processed in 0.052691 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表