说到java开发环境变量的配置,大家应该都很熟悉,无非是安装好JDK以后配置系统环境变量path,以及CLASS_PATH,但是对于小白来讲,刚开始学习,是否真的知道为什么要这样配置?笔者最近在复习java相关的知识,想起刚开始学习java的时候根据教程一步步搭建好开发环境,当时是知其然不知其所以然,google了一下,发现大多是介绍如何配置的,还是没有解决笔者最初的问题。现在对于这个问题有了一定的了解,故写下此文,记录下当初的疑惑,也希望能为刚入门的朋友们解惑。

  JRE与JDK

  JRE(Java Runtime Environment)是指Java运行环境,就像图片文件只能由图形程序打开,音频文件只能由影音程序打开一样,不同的编程语言所开发出来的程序有不同的运行环境,JRE就是Java程序运行的载体。JRE中除了一些java的标准类库函数以外,值得一说的就是Java虚拟机了,为了方便大家理解,后面结合JDK再来说明,暂且记下JRE当中有一个叫Java虚拟机的东西存在就可以了。

  JDK(Java Development Kit)顾名思义,java开发工具,是连接java程序员与计算机的桥梁。用java语法编写好的源代码文件,交由JDK编译字节码,从而使得java源代码能够在Java虚拟机(JVM)中运行。

  终于说到JVM了,JVM(Java Virtual Machine)能够认识JDK编译出来的字节码,并且将字节码转换成各个平台都能理解的形式,由此,各大平台就可以不加修改的执行这段源代码文件了(PS:Java的跨平台性就是得益于JVM的存在,JVM屏蔽与具体操作系统相关的信息,使得java程序可以在各个平台执行,通俗的讲,就相当于不同国家的人进行交流,而JVM就是交流中精通多国语言的高级翻译员)。

  JRE和JDK都可以在Oracle的官网上下载到,如果仅仅想要运行别人写好的java程序,只下载安装JRE就可以了,但是如果要自己编写程序就要安装JDK了,由于编写程序还要进行测试需要jre,所以在安装JDK的过程中会弹出一个对话框询问是否需要安装jre。看到这里大家应该明白了,JDK当中其实是附带了完整的JRE的,而JRE中又有java程序运行必备的JVM,所以在安装工具包的时候只要找到JDK下载安装就可以编写和调试运行java程序了。

  JDK安装目录结构

  





    如上图就是我的jdk安装目录,这里只介绍相关的目录,想了解更多关于目录结构可以自行google。途中可以看到标注了三个文件夹,其中src.zip是Java所有源码的压缩包;jre就是JDK附带安装的运行环境;还用一个lib目录里有两个文件dt.jar(是关于运行环境的类库,主要是swing的包)和tools.jar(是关于一些工具的类库)大家注意一下,这两个文件也是运行时不可少的,重点来了,就是bin了,其中就是java开发工具的可执行文件,什么意思,就是说可以在命令行运行相关的命令来执行操作,如果是windows系统,打开会看到很多exe文件,比如javac.exe,java.exe等等,这两个命令分别是编译源代码和启动JVM运行字节码文件的命令,我们实际操作看一下:

  





  大家可以看到,开始的时候我们所在的目录是个人文件夹(cmd打开时默认路径),这时候执行java命令的时候报错了,我们需要用cd命令进入到java.exe所在的目录也就是bin目录才能执行这条命令,这也就是为什么我们需要配置环境变量的原因了!

  配置环境变量

  首先让我们进入环境变量的配置界面:右击计算机-属性-高级系统设置-环境变量,现在看到的就是这样的界面了:

  





  在配置环境变量之前,我们需要知道windows系统环境变量当中是有Path这一变量的,path变量的值就是一些路径,我们在命令行输入指令时,windows首先会在当前路径查找执行文件,其次会在path配置的路径中查找,如果还没有找到就会像上面一样报错,由于Path默认的值是没有bin目录的路径的,所以当我们只能先进入到bin目录才能运行java命令,如果每次运行命令都要先进入bin会很麻烦,而且效率也低,现在我们知道要在任何路径下都能运行bin的文件只需要在Path的值里面加上bin所在的路径就行了,像我的就是C:\Software\java\jdk1.8.0_74\bin要注意的是,path的值里面路径与路径之间要用半角;隔开,在配置的时候最好使用全英文输入。这个时候不管在哪个路径运行java的时候都不会报错了。

  现在配置好Path变量了,我们来写个HolleWorld来运行一下看看,执行javac HelloWorld.java之后大家会发现在当前路径下产生了一个与java文件同名的class文件,

  





  这就是编译器编译出来的字节码文件,这时候执行java HelloWorld就会看到‘Hello World !’就会出现在cmd界面了,这是因为JVM通过CLASS_PATH的值来寻找这种class文件,如果找到了就会将它转换成windows能够理解的形式来运行我们的程序了。由于1.5版本以后的JDK的智能性,如果没有配置CLASS_PATH则会自动到当前路径寻找class文件,如果配置了则会从CLASS_PATH的路径中找。而且使用Java的编译和运行工具时,系统可以自动加载之前提到lib目录下的dt.jar和tools.jar文件中的Java类,因此不再需要设置classpath环境变量了。但是jdk1.5之前的版本并没有这么智能化,所以还需要手动去配置classpath变量如下:.;C:\Software\java\jdk1.8.0_74\lib\dt.jar;C:\Software\java\jdk1.8.0_74\lib\tools.jar,要注意前面的.;这是用来寻找当前路径下class文件的,因为改动了classpath的值,所以也要加上寻找class文件的路径。那为什么网上还有很多教程都说要这样配置呢,可能是因为之前保留的习惯吧,而且配置一下也并无不妥,不过今天来讲,如果要使用自己封装的包,那么就要配置classpath变量,否则不配置也是可以的。

  看到这里,相信你已经配置好Path和CLASS_PATH变量了,现在配置JAVA_HOME变量会使得以后的工作简单很多,我们将JAVA_HOME变量配置如下:C:\Software\java\jdk1.8.0_74(也就是jdk的安装目录),这样配置以后,我们就可以 将Path和CLASS_PATH变量路径中的C:\Software\java\jdk1.8.0_74改为%JAVA_HOME%了,这样一来,即使以后重新安装jdk改变了安装路径,我们只需要去更改JAVA_HOME中的路径就行了,而且以后也会使用到JAVA_HOME这个变量的。