- 今天想尝试一下jdk11,所以配置了一下环境变量Path ,结果出现了Exception in thread “main” java.lang.UnsupportedClassVersionError
- 所以cmd+java -version 显示1.8
- cmd +javac -version 显示11,
- 应该是高版本编译之后在低版本上运行会有些解析不了,而且奇怪的是会出现编译和运行版本不一致的问题。
- 接下来cmd+where java 和where javac, 发现第一种出现了两条路径,如下图:
所以打开环境变量的配置部分,发现了确实有这条路径,这个路径下有3个,
只需将这条路径删除或者移到新配置的路径下面即可解决。但是疑惑的是为什么会出现这条路径,肯定不是我自己配置的。
之后一顿搜索结果如下:
1
2
3
总结:
同时安装的。
- 外部jre在安装时,由操作系统自动配置了环境变量,且变量指向的路径只包含程序运行的java.exe,主要针对用户运行程序用的,打开jre也会发现下面没有javac.exe。
- jdk里面的jre下,有lib+bin\server\jvm,用于运行java字节码文件,lib是运行时用到的包,之前版本中需要用到的JAVAHOME\lib 起始也是用于运行的。但是该jre下面同样没用javac.exe.
- 在jdk\bin下面有javac和java,但是没有jvm,所以是为开发人员提供开发用的,所以现在只需要在配置环境变量的时候在path下面给出到bin的路径即可。
- 那么只给出到jdk\bin的路径,怎么运行呢
- 其实外面的jre和jdk\jre没有什么区别,都是用于解释执行字节码文件的,都有jvm和lib,都没有javac不能编译。
- 所以如果安装的时候选择了安装外部jre,那么环境变量里就会自动配置好了路径,可以在给定的路径下执行,否则的话,操作系统会现在同目录下找jre,之后回去父目录下找,最终执行jdk里面的jre。
- 有一个疑问,希望大佬能给解答,ProgramData\Oracle\Java\javapath 下面的java.exe 和与jdk同级别的jre\bin下面的java.exe有什么区别和联系,大家说的是前者是一个指向后者的快捷方式,但是我的不是,
很奇怪这个是怎么和同级别jre关联起来的。