JDK环境变量配置详细解析 深碍√TFBOYSˉ_ 2021-06-24 16:00 454阅读 0赞 以前只知道傻傻的跟着教程配置jdk环境变量, 今天看了点资料,仔细的学习了一下,明白了为什么这么配置,还学了一些花里胡哨的玩意, 总结一下。 ## 环境变量的配置过程(以Win10为例,大同小异) ## 1.右键单击“**我的电脑**”,单击“**属性**”,点开“**高级系统设置**”,点开它: ![这里写图片描述][70] 3.点上面的“**高级**”,然后点下面的“**环境变量**”,然后弹出来: ![这里写图片描述][70 1] 4.在下面找到Path,点击,然后“**编辑**”: ![这里写图片描述][70 2] 5.下面那一行,加上一行字:`;xxxx\bin;` 注意,**开头和结尾各有一个分号**! 其中的xxxx是你的jdk安装目录,例如我的jdk安装目录是:“C:\\Program Files\\Java\\jdk1.8.0\_60”,那么我上面加上的一行就应该是`;C:\Program Files\Java\jdk1.8.0_60\bin;` 加上的一串字可以加在开头,也可以加在结尾,当然也可以加在中间,但是夹在中间是有一些要注意的地方的,所以不推荐,**推荐的是加在开头**。 6.然后一路“**确定**”就ok了。 7.打开命令提示符(win+r后输入cmd即可),输入“`javac`”,如果出来下面的一大堆,就说明成功了。(如果不成功的话,请再(jin)试(zao)一(fang)遍(qi)。) ![这里写图片描述][70 3] ## 为什么要配置环境变量? ## 首先看看环境变量的解释: > 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。 > 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。 > (来源:百度百科) 其中有一句话很关键,“**当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。**” 我们先撇开这些不谈,我们没有配置环境变量的时候想要运行**javac**命令应该怎么办呢? 打开cmd直接输入javac?显然不可以: ![这里写图片描述][70 4] 显示的是“javac不是内部或外部命令,也不是可运行的程序或批处理文件。”,这跟你瞎打一行乱七八糟的东西是一样的,对windows来说是一样的,它都看不懂。我们要向执行javac,必须找到这个可执行文件的位置,然后系统就会在那里找到javac程序,才能够执行。 也就是先`cd c:\Program Files\Java\jdk1.8.0_60\bin`,进入javac所在的目录,再`javac`命令,这样才可以运行: ![这里写图片描述][70 5] 所以,以后每次编译java程序的时候,都要进入这个目录或者打上这个目录的地址,系统才会到这个地方找到javac程序,才会运行。 这多麻烦啊! 再想想为什么有的命令可以,有的命令不可以呢?是因为cmd会在当前目录下找有没有符合的命令(可执行文件),如果找不到的话?这个就回到开头对环境变量的解释了,**“当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找”**,所以如果当前目录下找不到,系统就会在环境变量path中列举的目录依次去找。如果在这些目录中找到了就会执行,找不到才是会显示找不到。 所以我们把javac所在的目录也列入环境变量path中,这样的话,在计算机的任意位置执行javac是都可以的了。 ## 还有没有什么问题? ## 这样把环境变量配置了,可以一劳永逸的使用那些命令了。但是还是会产生一些问题:我们如果想把jdk换一个地方储存,或者是把jdk改个名字,再或者版本升级新版的把旧的替换掉,所有这些会导致javac所在目录路径发生变化的事情,都会导致原有的环境变量配置都需要做出新的调整。这个时候有没有发现path很长,windows默认的窗口根本盛不下,每次添加修改的时候都得小心翼翼?而且我们发现,比如上面添加的`;C:\Program Files\Java\jdk1.8.0_60\bin;`,这些内容再怎么变化,也是中间的目录`C:\Program Files\Java\jdk1.8.0_60`发生变化,其他的是不会变化的。 所以就有了这个办法:我们规定一个东西,比如“AAA”吧,它就等于“`C:\Program Files\Java\jdk1.8.0_60`”,那么,原来的环境变量不就变成了`;AAA\bin;`了吗,这样我们每次修改的时候,只大胆的修改AAA就可以了,path里面添加的那些东西,就不用再如履薄冰地动它了。 但是,上面的只是我们的设想,在windows下,自有一套这样的做法,我们新建一个环境变量,也就是上面的AAA,我们通常起名为“`JAVA_HOME`”,然后把它的值设为`C:\Program Files\Java\jdk1.8.0_60`,然后在path里面添加“`;%JAVA_HOME%\bin;`”,这两个百分号括起来的东西,就是**动态获取环境变量的值**,会让系统自己去找它所指代的东西。这样,每次有变化的话就只修改JAVA\_HOME里的值就可以了。 甚至可以想的再极限一点,在path里的那一大长串,我们的java环境变量放在前面,后面,还是中间呢?当然是前面更好一些,因为系统是从前往后找的,所以放在前面,会更快。(至于快多少,哈哈哈哈\_) ## 花里胡哨:怎么配置个临时环境变量? ## 有些情况下,如果我们希望配置一些环境变量,但是我们只是希望它能暂时的起作用,等会这个环境变量消失或者恢复原样就可以了。也就是我们希望配置一个临时的环境变量,这个时候怎么办呢? 这个时候我们需要用到一个命令“`set`”,我们在命令提示符窗口下输入set,会显示出所有的环境变量: ![这里写图片描述][70 6] 而我们在set后面加上具体的环境变量,就会显示某个环境变量的具体数值,例如:`set path`: ![这里写图片描述][70 7] 如果再在后面加上=XXX,例如:`set path=test`,这样就会把该环境变量改变为某个值,再用`set path`查看一下: ![这里写图片描述][70 8] 我们可以看到,path的值已经发生了变化,但是这个时候我们再打开一个新的命令提示符窗口,输入set path查看path环境变量的值,发现还是原来的值: ![这里写图片描述][70 9] 所以利用这个思路,我们可以临时配置一个环境变量。 就是在命令提示符窗口中,输入`set path=C:\Program Files\Java\jdk1.8.0_60\bin`,就可以了,这样再使用javac是可以的。 但是这样还是有一个问题:path的值现在只有这一个了,其他的一些命令可能又没法使用了,所以我们还得改进方法,做到在path原来的基础上,添加新的值,而且不破坏旧的。 还记得之前说的两个百分号括起来的东西吗,动态获取环境变量值,我们可以利用它来做点事情,比如上面我们已经将环境变量设为javac的目录了,我们想再加上一个值,比如加上“have\_a\_try”,我们输入“`set path=have_a_try;%path%`”就可以了。 ![这里写图片描述][70 10] 我们可以看到,path的值已经按照我们的意愿发生变化了,而且这个path是个临时的值,关掉以后就会影响恢复了。 \[END\] -------------------- 也没有什么很难的地方,就是有一些以前从来没想过的东西,现在知道了为什么,怎么做。哈哈哈哈^\_^ **如有纰漏,望不吝指出,不胜感激。** [70]: /images/20210615/f1b1e7986fda41e0b93e082a4762bf7f.png [70 1]: /images/20210615/3b0b0262c148456bb45ee1185d47f69c.png [70 2]: /images/20210615/a970c5a4aa6440eeafbebeb6e8925524.png [70 3]: /images/20210615/b16dd812dd0242df850cba9e7d565365.png [70 4]: /images/20210615/e554ad259078478c857d370f4cb2e42c.png [70 5]: /images/20210615/85cf58f142294f82b26d33caa647ca17.png [70 6]: /images/20210615/a92def23162a464b8cc9d1e5c91b02b3.png [70 7]: /images/20210615/51521aa057cc4a55883908553c71e123.png [70 8]: /images/20210615/20ba2286cb4743b88671f096679e79ee.png [70 9]: /images/20210615/3e2ec2650613445db8a3f01bf3ee7d7c.png [70 10]: /images/20210615/3e0d7148557047f5908a8e478eb2d8f9.png
还没有评论,来说两句吧...