百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术流 > 正文

什么是环境变量?(什么是环境变量?为什么要配置环境变量?)

citgpt 2024-07-12 09:59 9 浏览 0 评论

前言

在初学 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 环境是否安装成功的时候,我们在终端工具中输入 javajavac 命令显示出相应的字符的原理想必你也就知道了吧。

一图说明:

题外话

作为一个计算机专业的学生,一定要学会使用命令行工具,你可以选择自己喜欢的终端软件,这里我使用的是 「Windows Terminal」,一方面是因为他是微软官方推出的终端工具,更有一点就是他的颜值很高,你可以在微软的应用商店搜索下载安装。

以上就是本文的全部内容了,如果你觉得对你有所帮助,不妨点赞关注支持一波

相关推荐

js中arguments详解

一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...

firewall-cmd 常用命令

目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...

epel-release 是什么

EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...

FullGC详解  什么是 JVM 的 GC
FullGC详解 什么是 JVM 的 GC

前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...

2024-10-26 08:50 citgpt

使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
跨域(CrossOrigin)

1.介绍  1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。    通俗讲...

微服务架构和分布式架构的区别

1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...

深入理解与应用CSS clip-path 属性
深入理解与应用CSS clip-path 属性

clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...

2024-10-25 11:51 citgpt

HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
Request.ServerVariables 大全

Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...

python操作Kafka

目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...

Runtime.getRuntime().exec详解

Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...

promise.all详解 promise.all是干什么的
promise.all详解 promise.all是干什么的

promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...

2024-10-24 16:21 citgpt

Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解

取消回复欢迎 发表评论: