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

2023-11-13

本文是将https://blog.csdn.net/qq_37872792/article/details/80642985 与 https://blog.csdn.net/Pre_waist_L/article/details/79696507两篇文章总结而成,此外,大家还可以参考这篇博文https://blog.csdn.net/mylittleone/article/details/79651536特此申明!

 

一 . 什么是环境变量?

 

1.1  用户变量与系统变量

我们首先先找到修改系统变量的地方:

右键我的电脑,单击“属性”;在出现的系统框中点击“高级系统设置”,你会进入一个系统属性框,选择里面的环境变量,你就会看到下面的框:

从上图我们可以看到环境变量包括用户变量和系统变量:

  • 用户变量是指我们当前登入这台电脑的用户,比如管理员用户,普通用户。在里面配置的环境变量,只对这个用户有效,一旦用户进行了更换,这环境变量将改为新登录用户的环境变量。
  • 系统变量是指这这台电脑的配置的环境变量,对所有用户都生效,不管你换哪个用户,都是生效的

​    

1.2  Path路径

我们先明确两个概念:

  1. path路径:用来指定可执行文件的搜索路径,也就是后缀名为.exe文件
  2. .exe文件:你桌面上快捷方式的根本,点开快捷方式相当于点开改文件;

通过一个QQ例子来讲解:

首先安装好QQ,我们不用快捷方式打开它,而是通过cmd进入dos界面,直接输入QQ,出现下面的图片

原因是,你想让系统运行一个程序,你首先得告诉它这个程序在哪,不然系统:“WTF”;

所以我们需要将QQ的可执行文件位置告诉系统,QQ可执行文件位置如下

所以我们在dos界面中找到QQ的可执行文件的路径,输入QQ,QQ就打开了:

但是,你关掉Dos后重新进入,输入QQ发现,又是上面的问题,这就意味着你要从Dos打开QQ的话,必须每次进入QQ.exe文件所在路径,每次都得给系统QQ.exe文件的绝对路径,这样很麻烦

于是英雄登场,一个一劳永逸的方法就是将QQ.exe的文件路径放在Path环境变量里面,以后要打开QQ就不用每次进入该路径了,下图是配上QQ.exe路径时的path变量

接着我们dos中不给路径直接输入QQ,就可以直接打开QQ了:

 

1.3  总结

path变量的作用是可以让我们在没有这个应用的路径下面打开我们需要打开的应用,前提是这个应用得在环境变量里面配置了路径

 

 

二.    为什么java要配置环境变量

 

2.1  为什么要配置jdk的环境变量

我们为什么要配置java(jdk)的环境变量呢

1. 因为我们没有配置 jdk的环境变量,所以在没有在jdk/bin目录下是运行不了 java.exe和javac.exe(具体关于jdk和javac的知识请点这里

那好办,我们可以去jdk/bin目录下运行java程序啊,但我们在bin目录下通过启动java.exe,然后再通过javac.exe要把一个java文件编译成class文件,这个class文件就生成在jdk/bin目录里了,这样不好,所以我们需要把jdk配置到path里面,这样在任何目录下都能运行java.exe和javac.exe来编译Java文件了,这样就不会让jdk/bin目录里有许多我们的Java文件和class文件。

 

2.2   如何配置

和上面一样,把jdk/bin目录加到path环境中去

       

配置完成后我们测试下:

在D盘的根目录新建一个HelloWorld程序,然后在dos里面运行

 

 

2.3  配置JAVA_HOME变量

如果我们需要配置多个 jdk 的环境变量,我们也需要把每个目录都添加到 path 中吗?这样 path 是不是就看起来很乱了呢?这时候,我们就需要一个 JAVA_HOME 变量了

在上面的编辑环境变量里面,我们有发现有些使用 %SystemRoot%system32 的变量值,但是我们在 cmd 中查看 path 环境变量的时候却没有发现有 %SystemRoot%system32 的字样,而是有个和他很像的 C:WINDOWSsystem32, 那是因为我们系统存在一个 SystemRoot 为变量名的变量,变量值是C:WINDOWS,而这个是隐藏的,我们无法看到,我们可以把这个变量名理解成我们 java 中的 int a = 1; int b = a; 后边的b是等于 a,而我们看到的效果是 a = 1,所以 b = 1;而不是 b = a 变量名.

配置步骤如下:

  1. 我们在系统变量这里点击新建:     
  2. 点击新建后弹出一个新建系统变量的窗体,然后把变量名填写为 JAVA_HOME ,把变量值填写成你 jdk 的安装目录(注意,不用 bin 目录),然后点击确定 
  3. 然后再编辑path环境变量,把刚才的配置的 jdk 的变量改成 %JAVA_HOME%binhjbl25.png
  4. 保存配置,打开一个 cmd 窗口,输入 path,可以看到,我们配置的环境变量的 %JAVA_HOME% 已经替换成刚才 JAVA_HOEM 变量的变量值了,而且 java 程序也能够运行

 

为啥要配置 JAVA_HOME,一定要用 JAVA_HOME 命名吗?

  1. 我们电脑如果装了多个版本的 jdk,我们只需要在 JAVA_HOME 中把 jdk 的目录添加进去,而不用在 path 里面加 bin 目录的路径
  2. 因为有些开发工具,如(eclipse,IDEA, tomcat)都会去扫描你的JAVA_HOME变量,看看你的电脑装了几个版本的 jdk。
  3. 可以不用 JAVA_HOME 这个名字当参数名,那么有些软件启动需要 JAVA_HOME ,例如 tomcat,当你不用这个命名,你就需要去修改 tomcat 的 bin 目录下的 catalina.bat 文件,才能启动 tomcat,何必呢?
    hjbl27.png

 

 

三.  配置 CLASSPATH 变量

我们配置 path 环境变量,只是告诉我们的电脑,我们装了 java ,这个应用放在哪里;而 CLASSPATH 就相当于 java 虚拟机的 path,它是用来告诉我们需要运行的 .class 文件时放在哪里。

配置CLASSPATH和JAVA_HOME配置类似,点击新建变量,变量名为CLASSPATH:

 

我们一定要配置 CLASSPATH 变量吗?一定要用 CLASSPATH 命名吗?

  1. jdk1.5 之后就不用再配置 CLASSPATH了,但是我们为了保证向下兼容 ,所以建议还是配置上为好。
  2. 在上面 JAVA_HOME 的图中,tomcat 也是会自动读取系统变量里面的 CLASSPATH。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是环境变量?为什么java要配置环境变量? 的相关文章

  • 汇编指令之MOV

    汇编指令之 MOV 传送字或字节 学习来自 汇编语言MOV指令 mov指令详解 Assembly Addressing Modes 汇编用户指南 MOV 简单格式 mov dst src 扩展格式1 MOV S cond Rd Operan
  • 集合框架 — ConcurrentHashMap

    集合框架 ConcurrentHashMap 一 ConcurrentHashMap JDK1 7 1 实现结构 2 保证并发安全 分段锁技术 3 put 和 get 方法 二 ConcurrentHashMap JDK1 8 1 实现结构
  • java IO流相关的类的分类和总结

    关于Java的IO流以前也总结过不少 根据API画出了IO流的类结构图 也写了不少相关的程序 但是没有对IO流做一个综合型的总结 最近在CSDN和ITeye上看了不少对IO流的总结 感觉有必要 抽时间总结一次 这既是对Java基础知识的进一
  • HIT-ICS大作业

    计算机系统大作业 题目 程序人生 Hello s P2P 计算机科学与技术学院 摘 要 大作业题为程序人生 Hello s P2P 围绕一个较简单的hello c函数的整个生命周期展开 介绍了该示例程序从编写到执行到结束的全过程 详细地分析
  • Mysql获取数据库的所有表以及表所有字段信息

    mysql获取所有表以及表所有字段信息 SELECT TB TABLE SCHEMA 模式 TB TABLE NAME 表名 TB TABLE COMMENT 表名注释 COL COLUMN NAME 字段名 COL COLUMN TYPE
  • I/O控制方式——通道控制方式

    一 定义 通道是一个独立于 CPU的专管输入 输出控制的处理机 它控制设备与内存直接进行数据交换 它有自己的通道指令 这些通道指令受CPU启动 并在操作结束时向CPU发中断信号 二 原理 2 1 通道控制方式的引入 通道控制方式与DMA控制
  • (转)找不到或无法加载主类(Could not find or load main class )

    原文 https blog csdn net shymi1991 article details 50540214 当我们试图在命令行编译运行一个简单的java程序HelloWorld java 编译命令javac HelloWorld j
  • 计算机的内存

    物理内存 内存是电脑的一个硬件组成部分 从单片机的组成我们可以看到 CPU 内存和输入输出接口 就组成一个完整的电脑 其他统统属于外设 内存是可以被CPU通过总线进行操作的 也就是与CPU之间有总线相连接的 电脑所有的输入输出 都是要从内存
  • Servlet详解

    一 Servlet的生命周期 创建Servlet有两个时机 一是客户端第一次请求每个Servlet时 系统创建该Servlet实例 另外是Web应用启动时立即创建Servlet实例 即load on startup Servlet 每个Se
  • java中的<;和>;分别是什么意思

    今天在做java笔试题的时候 有一题出现了这个符号 由于我不认识这个符号就做错了 题目如下 这题的答案是A 而我选了C 后面百度才知道 lt 的意思是小于 lt 符号 在用markdown写文章的时候 就会显示 笔者在这里贴出其他类似的符号
  • JAVA中常用的Queue的介绍

    目录 1 java中队列的分类以及队列的介绍 2 PriorityQueue队列的介绍 2 1 PriorityQueue继承结构和方法解读 2 2 PriorityQueue的构造器的实现 3 Deque 双向队列 的简单介绍 3 1 A
  • 【Java基础·Comparator多字段排序】

    Java基础 Comparator多字段排序 需求 对指定List按照 身份证号 姓名 入学时间倒序排列 版本1 package com biaogexf tools import lombok Data import java util
  • 内存管理技术——离散分配方式

    上一篇讲到 采用固定分区的方式 会产生页内碎片等缺点 因此引入了动态分区方式 但动态分区又产生了外部碎片 导致内存的利用率也不理想 为了进一步提高内存的利用率 所以就产生了离散的分配方式 理论来源于实际问题 这很好的体现在计算机科学中 离散
  • (四)现代计算机系统的层次结构

    程序执行结果 不仅取决于算法 程序的编写 而且取决于语言处理系统 操作系统 ISA 微体系结构 不同计算机课程处于不同层次 必须将各层析关联起来解决问题 功能转换 上层是下层的抽象 下层时上层的实现 地位为上层提供支撑环境 计算机系统的不同
  • 计算机系统实验六:程序的链接

    参考教材 计算机系统基础 第二版 袁春风 机械工业出版社 参考慕课 计算机系统基础 四 编程与调试实践 https www icourse163 org learn NJU 1449521162 计算机系统实验导航 实验一 环境安装 htt
  • 【linux】常用shell指令 [不断补充中...]

    前言 shell是一种脚本语言 需要有编译器执行 即 应用程序 gt shell gt 操作系统 gt 硬件 bash是linux下默认的shell sh是unix下默认的shell 多命令执行 xx xx 前面执行成功才会执行后面的命令
  • 向上转型和向下转型

    一 概念 向上转型是指将子类的实例赋值给父类类型的变量 向下转型是指将父类的实例赋值给子类类型的变量 二 向上转型 1 向上转型后父类的引用所指向的属性是父类的属性 2 如果子类重写了父类的方法 那么父类引用指向的或者调用的方法是子类的方法
  • 计算机系统课程 笔记总结 CSAPP第七章 链接(7.1-7.13)

    GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 1 2 2 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 3 2 4 计算机系统课程 笔记总结 CSAPP第三章
  • 二进制、八进制、十进制、十六进制之间的相互转换

    一 二进制 八进制 十六进制转换为十进制 方法 位权求和法 二进制用符号 B 表示 十进制用符号 D 表示 八进制用符号 O 表示 十六进制用符号 H 表示 100101 10111 B 1 2 5 0 2 4 0 2 3 1 2 2 0
  • 10 个牛逼的单行代码编程技巧,你会用吗?

    标题本文列举了十个使用一行代码即可独立完成 不依赖其他代码 的业务逻辑 主要依赖的是Java8中的Lambda和Stream等新特性以及try with resources JAXB等 1 对列表 数组中的每个元素都乘以2 Range是半开

随机推荐

  • [人工智能-深度学习-40]:英伟达GPU CUDA 编程框架简介

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121220362 目录 第1章 什么C
  • ROS之QtCreator开发环境搭建

    文章目录 系统环境 官方教程 安装 卸载 使用 导入工作空间 构建与运行 编写测试程序 系统环境 操作系统 Ubuntu20 04 ROS版本 Noetic 官方教程 按照官方教程或者下面笔记中的内容均能进行环境搭建 笔记中另外做了部分补充
  • IOS app 上线流程

    网上创建一份app资料等待对代码上传对接 登陆后 gt 右边 gt iTunes Connect gt 创建app资料
  • pom文件中的dependencyManagement和dependencies的区别

    dependencyManagement 只是声明依赖 并不实现引入 因此子项目中需要显示的声明需要用的依赖 如果不在子项目中声明依赖 是不会从父项目中继承下来的 只有在子项目中写了该依赖 并且没有指定版本 才会从父项目中继承该项 并且ve
  • Android---简易的底部导航栏

    目录 一 activity main xml布局 二 给ViewPager2 创建适配器 三 ViewPager2 数据源 四 MainActivity java类 1 初始化数据源 2 ViewPager2 页面改变监听 3 Bottom
  • 学会问问题

    推荐文档 学会问问题 目录 三句话原则 你就是孙子 问问题过程 第一步 学会问好 示例如下 第二步 有屁快放 问问题需要加上的前缀或者后缀 示例如下 第三步 介绍自己的框架 示例如下 第四步 介绍自己的解决思路 示例如下 第五步 根据大佬的
  • TCP 传输控制协议

    目录 可靠机制 5可靠 1 确认应答机制 2 超时重传机制 3 连接管理机制 建立连接 三次握手 断开连接 四次挥手 第2 3个数据报为啥没有合并 第2 3个数据报是否可以合并 了解 服务端出现大量的close wait 原因 为什么要四次
  • 机器学习 | 优秀Tensorflow开源项目汇总(上)

    1 Open model zoo 预先训练的深度学习模型和样本 高质量且快速 https github com opencv open model zoo 2 Deep Learning In Production https github
  • Tongweb部署JmReport,打成war包部署,启动正常,前台访问404

    jar改war改造 修改pom文件
  • CRM安装(二)

    7 安装CRM Server及Reporting Extensions 我这里首先启用虚拟机中服务器的远程桌面连接 在 这台电脑 的属性中 点击左面的 远程设置 在弹出的对话框中选择 允许远程连接到此计算机 然后应用 最后确定 这样我就可以
  • 使用statsvn统计svn中的代码量

    StatSVN介绍 StatSVN是一个Java写的开源代码统计程序 从statCVS移植而来 能够从Subversion版本库中取得信息 然后生成描述项目开发的各种表格和图表 比如 代码行数的时间线 针对每个开发者的代码行数 开发者的活跃
  • sqlite数据库的插入,删除,修改

    代码如下 include
  • WebService 之 WSDL文件 讲解 .

    一 WSDL概述 WebServices Description Language WSDL Web服务语言 是一个用于精确描述Web Service的文档格式 WSDL非常适合于用作代码生成器 它能够读取WSDL文档 并且可以为访问Web
  • python数据驱动ui自动化框架_自动化框架-数据驱动

    https www cnblogs com fnng p 6111516 html 最近在整理接口测试相关的资料 所以 看到有关资料就会多看两眼 偶看到别人发的微信公众号 Python接口测试框第一篇 python如何读取txt文件 Pyt
  • Ubuntu升级自带的Python3版本

    可以通过如下的步骤升级Ubuntu自带的Python3版本 比如自带3 6版本升级到3 8版本 1 添加安装源 在命令行输入如下命令 sudo add apt repository ppa jonathonf python 3 8 2 之后
  • 陀螺产业区块链第二季

    2020年4月 国家发改委在例行新闻发布会上宣布区块链被正式列为新型基础设施中的信息基础设施 自此区块链正式搭上新基建的 风口 与传统基础设施建设相比 新型基础设施建设更加侧重于突出产业转型升级的新方向 无论是 5G还是区块链 都体现出加快
  • 常见的二十种软件测试方法详解(史上最全)

    一 单元测试 模块测试 单元测试是对软件组成单元进行测试 其目的是检验软件组成单位的正确性 测试对象是 模块 对模块进行测试 单独的一个模块测试 属于静态测试的一类 测试阶段 编码后或者编码前 TDD 测试对象 最小模块 测试人员 白盒测试
  • 深入浅出mybatis(持续更新)

    一 MyBatis相关概念回顾 1 对象 关系数据库映射 ORM ORM 全称Object Relation Mapping 表示对象 关系映射的缩写 ORM 完成面向对象的编程语言到关系数据库的映射 它把关系数据库包装成面向对象的模型 采
  • 网格搜索多个监督学习模型上的超参数,包括神经网络、随机森林和树集合模型(Matlab代码实现)

    目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 1 概述 我们在选择超参数有两个途径 1 凭经验 2 选择不同大小的参数 带入到模型中 挑选表现最好的参数 通过途径2选择超参数时 人力手动调节注意力成本太高 非常不值得 F
  • 什么是环境变量?为什么java要配置环境变量?

    本文是将https blog csdn net qq 37872792 article details 80642985 与 https blog csdn net Pre waist L article details 79696507两