Java环境变量配置的两种方法思考和遇到的问题

createh51个月前 (05-12)技术教程15

今天看“Java从初学到精通”的时候(最近在看各种Java面试题,发现最常遇见的面试题都是很基础的知识和技术,然后就是很流行的框架,所以开始打牢基础知识,后期开始分享Java面试题。),突然发现了一个问题,有关环境变量配置的另一种方法。这种配置方法以前遇到过,但是没有仔细思考其中的区别,今天就来分享这两种配置环境变量的方法和其中容易遇到的问题!之前分享过其中的一种方法,但是对于javac不是内部外部命令,没做汇总,今天统一做一下汇总。

A、在这里默认大家已经安装的JDK和JRE,其实JDK的安装非常简单,我们只要去官网下载.exe的安装包,像安装QQ一样安装就行,也可以不改变路径,一直下一步,下一步直到把JRE也同样安装。

B、第一种配置方法:不需要CLASSPATH的方法。

a、新建JAVA_HOME,值就是我们JDK的主目录:“D:\Java8u92\jdk1.8.0_92”。

b、在path的末尾加入:“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;”。

c、确认重新打开命令行验证结果。

第二种配置环境变量的方法:需要CLASSPATH的方法。

a、新建JAVA_HOME,值就是我们JDK的主目录:“D:\Java8u92\jdk1.8.0_92”。

b、新建CLASSPATH路径:“%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;”。

c、在path变量中新增:“%JAVA_HOME%\bin”。

d、确认重新打开命令行验证结果。



注意:这里如果没有配置CLASSPATH,会出现javac不是内部或外部命令,同时,如果在path中直接引用CLASSPATH,同样会报javac不是内部或外部命令的提示。(特意把CLASSPATH删掉看:javac不是内部或外部命令)

C、思考:那dt.jar和tools.jar到底是什么东东?

大家可以打开看看源码,然后再打开一个源文件看一下,比较正常的jar包打开源文件,你就会发现:

dt.jar和tools.jar是两个java最基本的包,里面包含了从java最重要的lang包到各种高级功能如可视化的swing包,是java必不可少的。而path下面的bin里面都是java的可执行的编译器及其工具,如java,javadoc等,你在任意的文件夹下面运行cmd键入javac,系统就能自动召见java的编译器就是归功于这个环境。

变量的设置rt.jar是JAVA基础类库,dt.jar是关于运行环境的类库,tools.jar是工具类库,设置在classpath里是为了让你 import *。

思考:为什么打开dt.jar有的交易会报错呢,而有的不会?

首先说明jd-gui是没有错的,这个原因我找很久,答案不是很理想,我个人猜测是有些源码文件只是为了引入别的jar包的源码,这里只是一个快捷方式,而在JVM上运行是可以连接到原文,这里不行,所以才会报错,各位大神,有更好的解析吗?欢迎留言!

欢迎大家继续关注我的经验分享!

相关文章

Java 的变量类型

Java 中的变量分为两种,一种是基本类型,一种是引用类型。Java 的变量定义方式和 C 语言相似,类型在前,变量名在后。比如,定义一个整型变量:int answer = 42;变量的意思是,它的值...

java父子线程,变量传递问题解析

一,ThreadLocal 存储的线程变量不能在父子线程中传递项目中,我们经常会用ThreadLocal来存储线程变量,方便后续业务操作的获取。但是如果后续方法中又重新开线程去处理业务的时候,Thre...

配置Java环境变量:(WIN7为例)

1.JAVA_HOME变量的设置 2.Path变量的设置 3.ClassPath变量的设置二、JDK安装群文件下载好之后,进入文件夹,双击根据提示进行安装,直至安装完成。(建议默认地址,一下以默认...

「年底备战」Java 高级面试题之Java基础(附答案详解)

前言好哥哥们,Redis系列文章可能会先不弄了,目前的话写到了第二十四篇深入理解 Redis 主从复制,有感兴趣的好哥哥可以翻翻这个系列的文章(看完记得点赞加关注哟)。后面的话应该是会整理一些面试相关...

为什么阿里强制 boolean 类型变量不能使用 is 开头?你造吗

背景平时工作中大家经常使用到boolean以及Boolean类型的数据,前者是基本数据类型,后者是包装类,为什么不推荐使用isXXX来命名呢?到底是用基本类型的数据好呢还是用包装类好呢?例子1.其他非...

Java Reference核心原理分析

带着问题,看源码针对性会更强一点、印象会更深刻、并且效果也会更好。所以我先卖个关子,提两个问题(没准下次跳槽时就被问到)。我们可以用ByteBuffer的allocateDirect方法,申请一块堆外...