配置Java环境变量的原因及步骤解析

最近发现很多人还不知道怎么配置java的环境变量,即使会,也有很多人不明白为什么要配环境变量。本着授人以鱼不如授人以渔的原则,此文章将讲解配置环境变量的原理

在了解为什么配置环境变量之前,我们需要了解CMD

CMD(Command Prompt)是Windows操作系统中的命令提示符界面,它提供了一个命令行环境,允许用户在其中输入和执行各种命令。

我们需要知道的是CMD提供了供命令行文件运行的环境,简单来说,如果没有命令行,那么我们将无法运行命令行文件

那么什么是命令行文件?

我们打开JDK目录下的bin目录,可以看到很多可执行文件配置Java环境变量的原因及步骤解析_第1张图片

图中诸如javac.exe(编译程序)、javap.exe(反编译程序)、javah.exe等文件都是命令行文件,我们无法直接打开这些文件,只能通过CMD运行这些文件 

关于CMD、命令行文件,我们先了解到这里,现在我们知道CMD可以运行JDK中的命令行文件

下面我们需要了解 Java文件是怎么运行的

我们现在有一个Main.java的源文件,代码内容是输出Hello~world

如果想要执行这个文件,我们需要经历编译、运行的阶段

我们上面提到的javac.exe文件就是用于编译源文件的程序,它的作用是将如Main.java的.java文件编译成.class文件(字节码文件,以二进制存储),我们再使用java命令调用jvm虚拟机,使.class文件在虚拟机上运行 

所以想要运行java文件,我们需要先使用javac程序进行编译,编译后会自动生成一个.class文件

再运行.class文件

编译阶段:

配置Java环境变量的原因及步骤解析_第2张图片配置Java环境变量的原因及步骤解析_第3张图片

 这里我们写了一个.java文件,内容是输出Hello~world,下面我们打开CMD运行javac.exe对其进行编译配置Java环境变量的原因及步骤解析_第4张图片配置Java环境变量的原因及步骤解析_第5张图片

可以看到我们的测试~文件夹中自动生成一个.class文件,这是.java经过编译之后生成的字节码文件

运行配置Java环境变量的原因及步骤解析_第6张图片

可以看到java文件成功运行 

现在我们知道运行java文件需要使用到JDK中包含的命令行文件(如javac),而CMD的作用就是给这些命令行文件提供运行环境

下面我们来了解CMD是怎么运行命令行文件的,以javac.exe为例

上面我们运行javac的时候我的环境变量是已经配置好了的,那么在没有配置好环境变量的情况下进行上面的操作会怎么样?配置Java环境变量的原因及步骤解析_第7张图片

可以看到运行javac文件是没有生成.class文件的(实际上这里应该提示找不到javac文件,至于为什么没有显示,我也不清楚),那么为什么找不到javac文件呢?下面就要了解CMD运行文件的原理了

实际上,CMD在运行文件时,是通过系统环境变量中的Path变量逐个寻找指定文件的

首先我们需要知道怎么查看环境变量中的Path变量

以Win10系统为例 右键此电脑->打开属性->在关于里面找到高级系统设置->环境变量->Path配置Java环境变量的原因及步骤解析_第8张图片

 可以看到Path变量中有着很多文件路径

我们在CMD中输入javac Hello.java时,系统会根据Path变量中的路径,挨个寻找,直到找到javac.exe文件,如果找不到,就会提示找不到该文件,所以,我们配置环境变量实际上就是告诉CMD应该去哪找javac等文件,这样我们才可以正常的使用CMD运行java文件

现在,我们基本知道,配置环境变量实际上就是通过Path变量告诉CMD需要运行的程序在哪个位置。我们运行java文件,就需要用到javac.exe,那么我们就需要把javac.exe所在文件夹的路径保存到Path变量里面配置Java环境变量的原因及步骤解析_第9张图片

可以看到,我的javac文件在 D:\JDK1.8\bin这个目录,那么我就可以直接把D:\JDK1.8\bin这个路径添加到Path变量中,但是上面为什么我配置的是%JAVA_HOME%\bin呢?这是因为%%在环境变量中表示引用%%内的路径配置Java环境变量的原因及步骤解析_第10张图片

在系统变量中,我已经配置了JAVA_HOME变量为 D:\JDK1.8

那么%JAVA_HOME%\bin其实就是表示D:\JDK1.8\bin

这样我们在CMD中运行javac Hello.java的时候,系统就会自动到D:\JDK1.8\bin这个文件夹下运行javac程序

至此,我们在了解原理的过程中也顺手把java的环境变量配置好了~~

 

你可能感兴趣的:(java,linux,开发语言)