已经配置了很多次jdk了,每次都是安装网上的教程配的,今天突然想了解了解原理了,整理一下!

  参考贴(

  http://blog.csdn.net/wkupaochuan/article/details/7462180(讲解的不全)

  http://jingyan.baidu.com/article/bea41d435bc695b4c41be648.html(百度经验,里面有详细的配置过程,后面我就不说了)

通常在安装JDK过后需要配置两个环境变量:PATHCLASSPATH(由于windows平台对系统变量的大小写没有要求,所以大小写都可以,但是Linux系统中只能用大写)。

也许有人说还有一个JAVA_HOME, 其实这个变量的设置就是起到中转的作用吧,JAVA_HOME指向我们的JDK安装目录,自定义这个变量的目的大概是让我们比较方便的使用JDK安装目录吧(个人理解),所以JAVA_HOME可有可无。

要讲PATH和CLASSPATH这两个系统变量,就得先看一下JDK的根目录下面的几个文件夹了:

其中主要的就是bin、jre、lib三个文件夹了,

bin:该路径下存放了JDK的各种工具命令,常用 的有javac、java等;

jre:该路径下安装的就是运行java程序所必须的JRE环境;

lib:该路径下存放的是JDK工具 命令的实际执行代码程序,该文件夹下的dt.jar 和tools.jar是工具命令的类文件(.class);

   下面我们就来讲一下PATH和CLASSPATH这两个系统变量:

首先编译和运行java程序需要两步骤:

1、将.java源文件编译成.class字节码;

2、解释执行与平台无关的字节码程序;

这两步分别用到javac 和java这两个命令。

当我们运行这两个命令的时候,计算机是如何找到这两个命令的呢?也就是如何找到这两个命令的路径的?所以我们就要为这样的工具命令设置路径,让计算机能够自己找到他们。windows操作系统都是根据系统变量PATH来查找命令的,所以我们就将工具命令(bin目录)的路径加到path路径上面,计算机就能找到了(将D:\Java\jdk1.7.0_01\bin加入到path环境变量中):

环境变量中不同路径之间用分号隔开,Linux下面用冒号隔开。

这样的话在dos环境里面运行java、javac等工具命令时,计算机就能自动找到命令所在路径并执行了。

接下来计算机根据path里面的路径找到命令了,但是这个路径(也就是bin目录)存放的是工具命令的一个引用(快捷方式吧),具体的工具命令程序是保存在lib目录下的,所以这个时候计算机单单找到工具命令还不行,还要找到它的执行体,而这个执行体都是一些java的经过编译后的.class文件(lib目录下的dt.jar和tools.jar),所以我们要设置一个环境变量,将这两个文件(即类包dt.jar和tools.jar)路径放到 环境变量中,以便于计算机能找到执行。

而对于类文件,java设置了一个环境变量CLASSPATH专门来指向类文件,计算机根据这个环境变量下面的路径,就能找到相对应的类文件并执行了。所以jdk安装后,要把D:\Java\jdk1.7.0_01\lib\dt.jar;D:\Java\jdk1.7.0_01\lib\tools.jar两个路径加入到CLASSPATH中。

而我们通常设置的CLASSPATH路径前面还有一个点,即完整的CLASSPATH是              .;D:\Java\jdk1.7.0_01\lib\dt.jar;D:\Java\jdk1.7.0_01\lib\tools.jar

 这个点是用来干什么的呢?(假设有一个已经编译好了的java文件Hello.class)

我们执行这个文件  java Hello   这个时候JRE是到哪里搜索这个文件呢?可能有人说当前路径下搜索啊!这是对的,是在当前路径下搜索,但是JDK1.4及之前的版本没有设计这个功能,这意味着即使当前路径包含着Hello.class这个文件,在执行 java Hello  这个命令时,系统也找不到Hello这个类。

所以在JDK1.4及之前的版本中需要在ClassPATH环境变量中添加一个点(.),用来告诉JRE需要在当前路径下搜索JAVA类。所以CLASSPATH也就有了上面的路径  (.;D:\Java\jdk1.7.0_01\lib\dt.jar;D:\Java\jdk1.7.0_01\lib\tools.jar)。

总之,classPATH这个环境变量就是用来寻找类的。把相应的类路径添加进去,系统就能自动检索到并执行。

 在JDK1.5及之后发布的版本中,可以不用设置CLASSPATH这个环境变量了,因为JRE比以前更智能了,它会自动搜索当前路径下的类文件,而且在使用java的编译和运行工具时,系统也可以自动加载dt.jar和tools.jar文件中的java类,因此不再需要设置CLASSPATH环境变量。

但是当我们使用JDK1.5及之后发布的版本时,如果设置了CLASSPATH这个环境变量,JRE将会按照CLASSPATH环境变量指定的路径来搜索java类,而不会自动寻找java类的,所以要自己设置CLASSPATH的话,一定要设置正确,不然运行不了!

【JDK配置原创】JDK(JRE)环境变量配置原理 --费元星的更多相关文章

  1. jdk、jre环境变量配置

    1 jdk和jre的区别: (jdk:Java 开发工具包) (jre:Java 的运行环境) 只需这么记就可以了,想深入了解得自行查询相关资料 2 jdk是包含jre的,所以只需下载jdk. 官方网 ...

  2. Windows10系统下Java JDK下载、安装与环境变量配置(全网最全步骤)

    1.首先要明确: JDK.JRE.JVM的含义 2.下载目前最新的JDK:Java SE Development Kit 17,传送门::https://www.oracle.com/java/tec ...

  3. linux下JDK,tomcat的安装与环境变量配置

    先从网上下载jdk(jdk-1_5_0_02-linux-i586.rpm) ,下载后放在/home目录中,当然其它地方也行. 进入安装目录#cd /home#cp jdk-1_5_0_02-linu ...

  4. JDK、Jmeter、Android环境变量配置

    JDK环境变量 1.在系统变量里点击新建,变量名填写JAVA_HOME,变量值填写JDK的安装路径,在这里就填写"D:\Program Files\Java\jdk1.6.0_26" ...

  5. jdk、maven、tomcat环境变量配置

    1.jdk 新建环境变量: JAVA_HOME:C:\Program Files\Java\jdk1.8.0_91 CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\li ...

  6. CentOS下JRE环境变量配置

    很多时候,我们需要在CentOS上部署tomcat,从而搭建web服务器,然JDK/JRE环境是前提,这里就记录一下,在后面的时候直接使用. 下载jre-7u80-linux-x64.tar.gz,并 ...

  7. 安装JDK详细步骤,以及环境变量配置

    1.JDK 1)下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 点击同意, ...

  8. JDK的安装和Java环境变量配置

    所需工具:JDK    下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

  9. Java JDK下载、安装与环境变量配置

    https://blog.csdn.net/siwuxie095/article/details/53386227 https://blog.csdn.net/liudongdong19/articl ...

随机推荐

  1. OC category(分类)

    // ()代表着是一个分类 // ()中的Test代表着分类的名称 @interface Student (Test) // 分类只能扩展方法,不能增加成员变量 - (void)test2; @end

  2. 服务器安装anaconda

    SSH连接服务器可以用putty 网址:https://repo.continuum.io/archive/ 下载安装脚本 wget https://repo.anaconda.com/archive ...

  3. idea 一次性自动导包

    当复制粘贴一段纯文本代码时,许多类需要导包. 如图 使用optimize imports了,发还是没有办法导入未导入的包,只能删除未使用导包,这跟eclipse不一样,让人很不习惯,查了好多资料都没有 ...

  4. WebNotes(PHP、css、JavaScript等)

    1. 数据库编码格式 gb-2312仅支持简体中文,GBK支持简体.繁体中文,utf-8通用程度最高. 2. HTTP请求方法 get方法请求时,会将传输的数据跟在链接后“显式地”发送,受限于链接长度 ...

  5. 【luogu P1821 [USACO07FEB]银牛派对Silver Cow Party】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1821 反向多存一个图,暴力跑两遍 #include <cstdio> #include < ...

  6. 学大伟业 Day 6 培训总结

    今天接着昨天的继续讲数据结构 今天先是 分块 在统计问题中,尤其是序列问题,经常涉及到区间的操作,比如修改一段区间的元素,询问某个区间的元素的信息. 如果每次都对一整个区间的每一个元素进行操作的话,那 ...

  7. SQL Server笔记-语法

    1.USE <DatabaseName> //选择数据库 例:USE [master] //master是系统默认数据库 2.字段或表名与保留字或关键字重名时需要加. 3.COMPATIB ...

  8. C#中rpt的数据类型和Oracle中数据类型的匹配

    Oracle中number数据类型对应C#中decimal数据类型,结果是整数 Oracle中number数据类型对应C#中int32数据类型,结果是小数,保留两位小数 Oracle中中date类型数 ...

  9. LINUX日志的错误等级

    LINUX日志的错误等级 - CSDN博客 https://blog.csdn.net/solmyr_biti/article/details/50634533讯息等级 系统将讯息分为七个主要的等级, ...

  10. 【PTA 天梯赛】L2-026. 小字辈(广搜+邻接表)

    本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号.随后第二行 ...