什么是环境变量?
前言
在初学 Java 时,相信大家下载安装完 JDK 后的第一件事就是 「配置环境变量」,几乎所有的教程都会告诉你当你在命令行工具中输入了 java 命令和 javac 命令后看到类似如下的结果就说明你的 Java 环境配置好了 👇
不知道你有没有思考过这个「环境变量」究竟是什么?为什么配置了之后就会显示这样的内容,为什么不配置,就会提示你一个错误:'javac' 不是内部命令或外部命令,也不是可运行的程序或批处理文件。
如果你也有这样的疑问,不要着急,我们今天就来一探究竟。
文内相关的演示,均在 Windows10 操作系统下执行
从打开软件的两种方式说起
我们平时打开一个应用程序,一般是双击桌面图标或在开始菜单链接,无论是桌面的快捷图标还是菜单链接都包含了应用程序的安装位置信息,打开它们的时候系统会按照这些位置信息找到安装目录然后启动程序,这里以 QQ 这个软件为例:
上面是我们最常用的打开软件的方式,当然了,既然知道了一个应用程序的安装目录位置,我们也可以通过命令行工具进入启动程序所在的文件,通过命令打开,如笔者 QQ 的位置为:
"C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"
QQ 的启动程序名为 QQScLauncher,那么我们打开终端工具,使用 cd 命令进入该目录,再输入.\QQScLauncher.exe
,即可通过命令启动 QQ。
做一点改进
如果想要炫技,每次都先进入安装目录再打开文件显然有些麻烦,那有没有什么简单的方式,直接在命令行工具中输入 QQScLauncher 甚至直接输入 QQ 就能打开软件呢?
当然是可以的,我们只需要在用户变量名Path
中添加安装路径的字符,我们在命令行工具无需进入软件的安装路径即可打开软件了。
我们来试下直接在命令行工具中输入 QQScLauncher,果然可以直接打开软件了。
原因
为什么配置环境变量前,直接输入 QQScLauncher 无法打开软件呢?
这是因为操作系统并不知道你的 QQScLauncher.exe 这个文件在哪里,所以无法执行对应的文件。
你在命令行里输入的那几个符号,其实就是一些可执行程序的名字(标签、别名),是可以直接被当前系统直接执行的程序。如果是在 Windows 系统中,则这些被输入的符号就是可以直接被 windows 系统执行、后缀为'.exe'的程序(文件)。
那么为了能够让操作系统找到这个可执行文件,我们就需要把 QQScLauncher.exe 这个 可执行文件所在的目录作为 PATH 环境变量的一部分设置起来,这样当你在命令行输入一个命令的时候,操作系统就会自动搜索 PATH 变量中所指定的所有目录 了。
在 Windows 系统中 PATH 变量中的所有路径采用分号分割,如果在 Linux 系统中采用冒号分割。
如果你设置好了环境变量,在命令 行中还是出现同样的错误,那么有两种可能,一种就是你的设置不正确,另一种就是你的设置没有生效,一般你可以关闭命令行窗口再重新打开就可以了。
环境变量
上面所说的 PATH 变量其实就是环境变量,和他的名字一样,环境变量是描述环境的变量,是指在操作系统中用来指定操作系统运行环境的变量。它包含了一个或者多个应用程序所将使用到的信息。
例如 Windows 和 DOS 操作系统中的 PATH 环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到 PATH 中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
系统变量 OR 用户变量
相信细心的小伙伴已经发现了,在上图的页面中除了用户变量还有一个叫系统变量的。
事实上,环境变量是一个总称,代表了系统变量和用户变量,因此我们说环境变量都是指的系统变量和用户变量。系统变量就是系统级别的变量,用户需要使用系统变量。如果系统变量被修改了,而任何系统用户都在用系统变量,因此每个系统用户都将受到影响。用户变量运行在系统变量之上的,每个用户拥有不同的用户变量,不同用户的用户变量之间是并列的,也是互不干扰的。他们之间的关系图如下如所示:
看到这,想必在验证 Java 环境是否安装成功的时候,我们在终端工具中输入 java
和 javac
命令显示出相应的字符的原理想必你也就知道了吧。
一图说明:
题外话
作为一个计算机专业的学生,一定要学会使用命令行工具,你可以选择自己喜欢的终端软件,这里我使用的是 「Windows Terminal」,一方面是因为他是微软官方推出的终端工具,更有一点就是他的颜值很高,你可以在微软的应用商店搜索下载安装。
以上就是本文的全部内容了,如果你觉得对你有所帮助,不妨点赞关注支持一波 👍
本文分享自微信公众号 - 01二进制(gh_d1999add1857)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
零基础IM开发入门(四):什么是IM系统的消息时序一致性?
本文引用了沈剑《如何保证IM实时消息的“时序性”与“一致性”?》一文的图片和内容(由于太懒,图没重新画),原文链接在文末。 1、引言 本文接上篇《零基础IM开发入门(三):什么是IM系统的可靠性?》,讲解IM系统中消息时序的一致性问题。 所谓的一致性,在IM中通常指的是消息时序的一致性,那就是: 1)聊天消息的上下文连续性; 2)聊天消息的绝对时间序。 再具体一点,IM消息的一致性体现在: 1)单聊时:要保证发送方发出聊天消息的顺序与接收方看到的顺序一致; 2)群聊时:要保证所有群员看到的聊天消息,与发送者发出消息时的绝对时间序是一致的。 IM系统中消息时序的一致性问题是个看似简单,实则非常有难度的技术热点话题之一,本文尽量以通俗简显的文字为你讲解IM消息时序一致性问题的产品意义、发生原因、解决思路等。 2、系列文章 《零基础IM开发入门(一):什么是IM系统?》 《零基础IM开发入门(二):什么是IM系统的实时性?》 《零基础IM开发入门(三):什么是IM系统的可靠性?》 《零基础IM开发入门(四):什么是IM系统的消息时序一致性?》(* 本文) 《零基础IM开发入门(五):什么是I...
- 下一篇
Hive|如何避免数据倾斜
1. hive中桶的概述 对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是 针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。 把表(或者分区)组织成桶(Bucket)有两个理由: (1)获得更高的查询处理效率。 桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。 (2)使取样(sampling)更高效。 在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。 创建带桶的 table createtablebucketed_user(idint,namestring)clusteredby(id)sortedby(na...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合Redis,开启缓存,提高访问速度