【JDK配置原创】JDK(JRE)环境变量配置原理 --费元星

简介: 已经配置了很多次jdk了,每次都是安装网上的教程配的,今天突然想了解了解原理了,整理一下!   参考贴(   http://blog.csdn.net/wkupaochuan/article/details/7462180(讲解的不全)   http://jingyan.

已经配置了很多次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的话,一定要设置正确,不然运行不了!

未来星开发团队--狒狒 QQ:9715234
相关文章
|
4月前
|
Java
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
403 3
|
5月前
|
Java
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
这篇文章是Spring5框架的实战教程,深入讲解了AOP的基本概念、如何利用动态代理实现AOP,特别是通过JDK动态代理机制在不修改源代码的情况下为业务逻辑添加新功能,降低代码耦合度,并通过具体代码示例演示了JDK动态代理的实现过程。
Spring5入门到实战------9、AOP基本概念、底层原理、JDK动态代理实现
|
2月前
|
小程序 Java 程序员
JDK 和 JRE 有什么区别
JDK(Java Development Kit)是Java开发工具包,包含编译器、调试器等开发工具,用于开发Java程序。JRE(Java Runtime Environment)是Java运行环境,包含Java虚拟机和类库,用于运行Java程序。简言之,JDK用于编写Java程序,JRE用于运行这些程序。
69 1
|
3月前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
151 1
|
4月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
3月前
|
Oracle Java 关系型数据库
jdk17安装全方位手把手安装教程 / 已有jdk8了,安装JDK17后如何配置环境变量 / 多个不同版本的JDK,如何配置环境变量?
本文提供了详细的JDK 17安装教程,包括下载、安装、配置环境变量的步骤,并解释了在已有其他版本JDK的情况下如何管理多个JDK环境。
1841 0
|
4月前
|
Oracle Java iOS开发
JDK的选型、安装与配置
JDK的选型、安装与配置
143 1
|
4月前
|
Oracle Java iOS开发
JDK的选型、安装与配置
JDK的选型、安装与配置
148 1
|
5月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
385 0
|
5月前
|
开发者 C# UED
WPF多窗口应用程序开发秘籍:掌握窗口创建、通信与管理技巧,轻松实现高效多窗口协作!
【8月更文挑战第31天】在WPF应用开发中,多窗口设计能显著提升用户体验与工作效率。本文详述了创建新窗口的多种方法,包括直接实例化`Window`类、利用`Application.Current.MainWindow`及自定义方法。针对窗口间通信,介绍了`Messenger`类、`DataContext`共享及`Application`类的应用。此外,还探讨了布局控件与窗口管理技术,如`StackPanel`与`DockPanel`的使用,并提供了示例代码展示如何结合`Messenger`类实现窗口间的消息传递。总结了多窗口应用的设计要点,为开发者提供了实用指南。
320 0