配置JAVA_HOME环境变量的作用是什么?

配置JAVA_HOME环境变量的作用是什么?

1.前言

​ 在开始学习java之初就被告知要安装jdk并且要配置JAVA_HOME这个环境变量然后程序才能运行,那么按照这种说法不配置环境变量IDEA是不是就没办法运行,配置的环境变量究竟是为谁服务,真的是IDEA吗?
在这里插入图片描述

2.探索

我查看了网上对于配置环境变量的解释:

  1. Path:当用javac、java等命令编译、运行Java程序时,操作系统需要查找javac.exe、java.exe这些可执行文件的位置,然后调用这些可执行程序对Java程序进行对应的操作。我们开发程序代码之后,通常在代码文件夹所处的路径编译代码文件,操作系统会在用户所在当前路径和系统环境变量这两个地方查找对应的Java可执行文件,但是编译、运行Java代码的可执行文件所在的路径(即我们安装JDK的bin所在的路径)通常跟我们编写的代码是不再同一个文件夹目录下的,所以只能将其添加到系统的环境变量中,才能够找到对应的可执行文件,从而顺利编译、运行我们的代码。

  2. JAVA_HOME:直接在Path中编辑JDK安装的绝对路径,对大多数Java应用程序以及我们自己编写的Java代码都是可以正常编译、运行的,但是如果我们对本机安装的JDK进行版本修改或者升级,甚至对其安装路径进行改动,我们就需要更改Path中相应的内容。如果不小心误删了其它部分,很有可能导致我们的操作系统无法正常运行甚至崩溃,因此将bin之前的路径另外赋值给JAVA_HOME是很有必要的。

  3. CLASSPATH:指定程序中使用的.class文件的位置,我们在编写程序代码时经常会引用JDK封装好的类,这些类文件都在上文提到的两个文件夹下面。如果程序中调用我们前面自己编写的Java类,就需要我们在当前所在目录文件夹下面寻找,此时需要我们加上一个 . 来指定同时可以在当前目录下查找.class文件。

    原文链接:https://blog.csdn.net/root5/article/details/78024595

一句话,配置环境变量是为了让系统找到jdk,进而使用javac,java等命令编译,也可以理解为不配置jdk就无法解析java程序,那么这个识别过程是为IIDEA服务的吗?

2.1使环境变量中配置的jdk版本与IDEA中的jdk版本不同

如果说JAVA_HOME是为了给IDEA服务,那么我们在idea中使用的jdk版本必须与JAVA_HOME中配置版本相同
我将IDEA中的jdk版本切换但不改变JAVA_HOME指向的路径
在这里插入图片描述
在这里插入图片描述

发现在这种不匹配的情况下程序都可以运行,至此我们可得出一个结论,配置JAVA_HOME不是为IDEA服务的,在SDK中也可以证实这个结论,IDEA中直接指向了jdk的文件路径,跟我们配置的环境变量指向的路径是相同的,这说明IDEA可以直接使用jdk。既然不是为IDEA服务,那么JAVA_HOME又是为谁服务的呢,是为了让谁识别java程序呢?
在这里插入图片描述

2.2删除JAVA_HOME环境变量

接着我索性将JAVA_HOME这个环境变量删除,在这过程中我发现了另一个现象,即使我将path中的%JAVA_HOME%\bin删除,我使用java -version仍然可以看到版本号
在这里插入图片描述
在这里插入图片描述

然后我猜想是不是在下载jdk的时候自动帮配置了环境变量,随后网上看到了这篇文章,Java环境变量,真的还有必要配吗?这篇文章证明了我的猜想,下载jdk的时候自动帮配置了环境
那么我们如何指定java -version呢?难道AVA_HOME的作用是指定java -version吗,但我们指定的版本对IDEA运行程序没有影响啊!
在这里插入图片描述
安装jdk时自动配置的环境变量(这是两个不同的版本)

3.解决

3.1如何指定版本

经过一番测试,发现系统识别环境变量的顺序是由上到下,指定版本的方法就是调节环境变量的顺序

  1. 调整18版本的jdk在上,java -version显示18版本
    在这里插入图片描述
    在这里插入图片描述
  2. 调整1.8版本的jdk在上,java -version显示1.8版本
    在这里插入图片描述
    在这里插入图片描述
  3. JAVA_HOME指向16版本jdk,调整1.8版本的jdk在上,java -version显示1.8

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

至此JAVA_HOME用来指定系统识别版本的猜想被打破,但是使用JAVA_HOME来指定版本更为安全,直接在Path中编辑JDK安装的绝对 路径,对大多数Java应用程序以及我们自己编写的Java代码都是可以正常编译、运行的,但是如果我们对本机安装的JDK进行版本修改或者升级,甚至对其安装路径进行改动,我们就需要更改Path中相应的内容。如果不小心误删了其它部分,很有可能导致我们的操作系统无法正常运行甚至崩溃,因此将bin之前的路径另外赋值给JAVA_HOME是很有必要的

3.2配置环境变量作用到底是什么

在上述中我们证明了配置环境变量跟IDEA运行程序是毫无关系的,因为在IDEA中本来就指定了文件路径,那么既然与IDEA无关,那我们就脱离IDEA来探究这个问题
我们使用maven生命周期中的package进行打包操作,然后在cmd指令中运行程序
在这里插入图片描述

  1. 首先我们将所有有关jdk的环境变量删除

在这里插入图片描述

然后cmd运行

在这里插入图片描述
发现无法识别指令
在这里插入图片描述
2. 接着我们再将jdk环境变量添加进去
在这里插入图片描述
我们可以看到程序可以正常运行
在这里插入图片描述
至此我们也就解决了这个问题,当我们不依靠IDEA之类的java编译器想运行java程序的时候才会使用到环境变量

4.猜想

    如果说上述结论正确,那么可以推论我们配置的maven,mysql等一系列的环境变量都只是为了不依靠IDEA也能运行程序,这应该就可以解释为什么我们可以使用IDEA自带的maven,mysql,jdk而不配置环境变量。
  • 13
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值