环境变量的作用

因为我接触到环境变量是在为Java配置环境变量时,因此仅谈谈对于环境变量 PATH 在命令行执行命令时的作用的理解。

简单讲,就是当你在cmd执行命令行命令时,系统除了在当前工作目录寻找命令(或可执行文件),还在环境变量中涉及到的目录去寻找。

举个简单的例子,例如我的steam下载在 D 盘根目录下,我想用命令行启动steam客户端,那么有两种方法。

1.在 D:\steam 目录下启动 cmd,并在命令行输入 steam。

2.若此时工作目录并不在该目录,在命令行输入 steam 会被提示“ 'steam' 不是内部或外部命令,也不是可运行的程序或批处理文件。”此时可以将 D:\steam 配置进环境变量 PATH 当中,就能便捷地在任意目录下使用 cmd 输入 steam 来打开 steam 客户端了(不会有人这样做的对吧)。

系统环境变量与用户环境变量

在配置环境变量当中可以看到这两个选项,关于二者的区别字面上很容易理解,就是公共与私有的关系,这里讲讲在配置 Java 的环境变量时遇到的有趣现象。

似乎所有人学习 Java 之初都会跟着教程配置一遍环境变量,不过看了另外一个博主的文章,他有讲到,配置环境变量目前来看似乎只是多此一举。

(下面是原文链接,感兴趣可以看看Java环境变量,真的还有必要配吗? - 腾讯云开发者社区-腾讯云 (tencent.com))

简单讲,一是因为至少据我所知,在 jdk8 之后,在安装过程中会自动为你配置环境变量;二是配置环境变量的目的似乎仅仅在于能够在任意目录下使用 java 与 javac 命令,但是尝试过发现,在 jdk\bin 目录下无论是否有环境变量,都是可以直接使用 java 与 javac 命令的,且在绝大部分人使用集成平台进行开发的情况下,是不会使用 javac 编译 Java 程序的。

遇到的有趣现象在于,我因为需要,同时安装了 jdk17 与 jdk8 两个版本,搜索学习了如何自由切换两个版本的方法,大概就是在环境变量中配置 JAVA_HOME8 与JAVA_HOME17 分别对应两个版本的安装路径,然后配置 JAVA_HOME,其值根据需要使用的版本填入 %JAVA_HOME8% 或 %JAVA_HOME17% ,实现版本切换。(注意在切换后需要重新启动 cmd 查看当前 Java 版本)

然后在此时遇到了问题:其实并没有切换成功。查资料后发现,对于环境变量 PATH,系统在根据环境变量查询时,其实是有先后顺序的。前面提到的自动配置环境变量,对于 jdk17 是在系统环境变量的 PATH 下,添加了如下两个目录,且顺序较我自己添加的 %JAVA_HOME%\bin 是靠前的,于是将自己配置的变量提前,发现依然无法从 jdk17 切换到 jdk8。

又经过查询发现,有人尝试删去上述两个目录,并成功实现切换。(如果怕删去造成影响可以在目录前后随意加一些字符,例如 .bak,相当于注释掉了该条目录)可是我明明让自己配置的变量在前面了,为什么会不起作用呢?

反复试验后发现,原因在我的 JAVA_HOME、JAVA_HOME8、JAVA_HOME17 等一系列变量,配置为了用户环境变量。推测系统对于环境变量的检索逻辑为先索引系统环境变量,后用户环境变量,即使将 JAVA_HOME 放在系统变量中,而将 JAVA_HOME8 与 JAVA_HOME17 放在用户变量中,同样不行。于是推测当系统调用到 %JAVA_HOME%\bin 时,因为 JAVA_HOME 中嵌套了用户变量,系统不会立即去寻找 JAVA_HOME的取值,而是访问了之后的所有系统变量后,再对嵌套的用户变量进行调用,因而即使 %JAVA_HOME%\bin 是靠前的,还是先访问了上图中的两个目录,并且调用了 jdk17 版本的Java。

文章为个人见解,如有谬误及不妥之处欢迎指正,感谢您的教导

关于环境变量的一点心得相关推荐

  1. Windows中的环境变量一览

    环境变量是操作系统中一组具有名称的值,能够影响应用程序的执行效果.环境变量是应用程序的执行环境的组成部分,例如:一个正在运行的程序可以通过"TEMP"这个环境变量来获取操作系统中用 ...

  2. [转]JAVA环境变量设置完全版

    作为初学者.感觉这边文章不错.就转来了.下面有转载的地址.最下面是我写的一个例子.配置完环境变 量后,大家可以调试一下. 在完成了JDK的安装后,环境变量设置是其安装后的首要操作,有人会问为什么要设置 ...

  3. CTS(3)---CTS 测试的一点心得

    CTS 测试的一点心得 CTS介绍-----------------------------------------------3 什么是CTS---------------------------- ...

  4. Linux shell 学习笔记(4)— linux 环境变量(全局变量、局部变量及变量持久化)

    1. 环境变量概念及分类 bash shell 用一个叫作环境变量(environment variable)的特性来存储有关 shell 会话和工作环境的信息(这也是它们被称作环境变量的原因).这项 ...

  5. Linux下修改PATH环境变量

    Linux下有很多环境变量,PATH就是其中的一种 PATH 可执行文件的搜索路径.ls命令也是一个程序,执行它不需要提供完整的路径名/bin/ls,然 而通常我们执行当前目录下的程序a.out却需要 ...

  6. Linux下的Shell编程(2)环境变量和局部变量

    Shell Script是一种弱类型语言,使用变量的时候无需首先声明其类型. 局部变量在本地数据区分配内存进行存储,这个变量归当前的Shell所有,任何子进 程都不能访问本地变量.这些变量与环境变量不 ...

  7. Visual Studio环境变量使用实例:使用环境变量来组织project

    前言 在前一篇文章Visual Studio中的环境变量(以Visual Studio 2013为例)中介绍了VS中的环境变量,本文将以实际样例说明怎样合理使用这些环境变量来组织VC++project ...

  8. jdk环境变量配置极速版

    计算机→属性→高级系统设置→高级→环境变量→系统变量(当前电脑所有用户生效) 新建JAVA_HOME: 变量名:JAVA_HOME: 变量值:C:\Program Files\Java\jdk1.8. ...

  9. java SE环境变量配置

    JDK默认安装后jdk和jre都在C:\Program Files\Java目录下. 1.配置环境变量:右击"我的电脑"-->"属性"-->&quo ...

最新文章

  1. 求求你别再用 System.out.println 了!!
  2. 全美人工智能研究生院排名出炉:CMU第一,MIT第二
  3. 分享Kali Linux 2017年第12周镜像文件
  4. python 文件操作 os.readline()函数用法
  5. 【NLP技术应用】工业界求解NER问题的12条黄金法则
  6. 从零开始搭建spring-cloud(0) --springboot与springcloud的关系
  7. 记录ionic 最小化应用时所遇的问题
  8. Objective-C基础语法快速入门
  9. 雷云3编辑使用宏鼠标连点
  10. c语言中怎么避免整数除法,大整数除法
  11. JDY-24M蓝牙应用探索
  12. AVAudioPlayer 播放本地音乐
  13. pdf打印去掉页眉页脚(兼容ie)
  14. 跑步机上的精彩人生——Linus大神传奇
  15. 移动医疗APP的渠道策略
  16. 【计算机网路-第四章】IP地址和子网掩码
  17. 访问学者申请德国签证如果丢失了怎么办?
  18. salad --06
  19. LightOJ 1079 Just another Robbery
  20. 新一代嵌入式UI框架 HaaS UI 使用JS在嵌入式开发炫酷前端

热门文章

  1. ortools 学习
  2. 如何设置省略号对其序号 html,html 用css实现table中超长字符串省略号表示 - 天天好心情 - 博客园...
  3. 【JZOJ 4637】 大鱼海棠
  4. R语言使用epiDisplay包的summ函数计算dataframe数据中的指定数据列在分组变量下的统计量(样本数、均值、中位数、标准差、最大值、最小值)、可视化一个按照分类变量绘制的有序点图
  5. 蚁群算法(Ant System)(AS)
  6. WCF服务以控制台程序为宿主时的跨域访问问题(附源码)
  7. java对视频进行转码
  8. Chrome Web Store
  9. 队列queue(2):链表实现队列
  10. Ubuntu19安装Nvidia显卡驱动