java path环境变量_Windows下PATH等环境变量详解

2023-11-18

在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH。正确地配置这些环境变量,是能够顺利学习、开发的前提。而经常出现的问题是:有的学习者能够按照提示一步一步地正确配置,但时间一长就忘了,出现了问题也无从下手。究其原因,就是对这些概念没有理解,知其然但不知其所以然。下面的内容,就是帮助大家知其所以然。

一、基本原理

首先看PATH环境变量。

JAVA的初学者,必须要学会配置PATH环境变量,否则无法编译、运行JAVA程序。那么,为什么要配置PATH环境变量呢?PATH环境变量是做什么的呢?我们从一个常见的问题入手。

当我们安装好JAVA后,若没有正确配置PATH环境变量,则在命令行窗口(开始->运行->输入cmd,回车)下运行命令java -version(显示JAVA的版本)命令时,会出现如下的错误提示信息:

97694380_1.jpg

图一

这条错误信息的意思是,你要求运行的“java”这条命令我不认识,不知道是个什么玩意儿。那么究竟这个“java”命令是何方神圣呢?在JDK的安装目录下(我的是D:\Java\jdk1.6.0_24),有一个bin目录。打开此目录,会发现大量的可执行文件(后缀名为exe的文件。Windows默认隐藏文件后缀名。要显示后缀名,可在当前窗口上方菜单栏里点“工具”菜单->文件夹选项->查看->高级设置->清除“隐藏已知文件类型的扩展名”前面的钩钩->确定)  。其中有一个可执行文件即为java.exe。现在在命令行窗口下把当前目录切换到这个bin目录下。通过如下命令实现:

97694380_2.jpg图二

在此目录下,运行dir命令,显示当前目录下的所有文件和目录。从显示结果中,我们可以清楚地看到“java.exe”这个文件。如下图所示:

97694380_3.jpg

图三

实际上我们执行“java”命令,就是要运行“java.exe”这个可执行文件(我们运行其他命令,本质上也是要执行某个程序文件)。我们现在再来执行“java -version”这条命令试试。在命令行窗口下键入java -version,回车,结果如下图所示:

97694380_4.jpg图四

看来这次执行成功了。命令结果显示当前JAVA的版本是“1.6.0_24”。执行java -?可查看此命令的帮助信息。可以看到它有很多选项,-version只是其中之一。另外一种方式是,写出这些可执行文件的完整(绝对)路径(例如:d:\Java\jdk1.6.0_24\bin\java -version),就可以在任何目录下执行了。读者可自行尝试。

与java命令类似,javac命令目前也能在bin目录下执行,但到其他目录下就只能写出其完整路径了。在学习JAVA的过程中,我们经常需要使用javac和java这两条命令来编译、运行我们的JAVA程序。难道我们每次运行这两条命令都要先切换到bin目录下吗或写出一长串的绝对路径吗?能不能有一个办法,让我们能够在任何目录下都能自如地运行这些命令呢?

解决的办法就在于PATH环境变量。

PATH是路径的意思,PATH环境变量中存放的值,就是一连串的路径。不同的路径之间,用英文的分号(;)分隔开。系统执行用户命令时,若用户未给出绝对路径,则首先在当前目录下寻找相应的可执行文件、批处理文件(另外一种可以执行的文件)等。若找不到,再依次在PATH保存的这些路径中寻找相应的可执行的程序文件。系统就以第一次找到的为准;若搜寻完PATH保存的所有路径都未找到,则会显示类似于图一的错误信息。

明白了这些,我们就把bin目录的完整路径添加到PATH中。在命令行窗口下,可使用set命令完成此类的任务。直接运行set,会显示系统当前所有环境变量的值,运行set /?,会显示关于此命令的帮助信息。使用set命令设置环境变量值的格式为:set 环境变量名=环境变量值。我们可以使用命令set path=D:\Java\jdk1.6.0_24\bin将java等程序文件所在的目录添加到PATH环境变量中(Windows下环境变量名不区分大小写,这与UNIX不同)。但是这样会使PATH的值只有“D:\Java\jdk1.6.0_24\bin”,它预先设定供其他程序使用的值就都被覆盖了。因此,我们应该把值“D:\Java\jdk1.6.0_24\bin”追加到PATH中。为此,我们可以使用如下命令:

set path=%path%;D:\Java\jdk1.6.0_24\bin

把PATH放在两个百分号之间,指把PATH原有的值取出。其后的分号表示分隔不同的路径值,之后才是我们要添加的值。注意,请在英文输入法状态下使用此命令。现在我们转到任意一个目录下执行java -version命令试试。结果如下图所示:

97694380_5.jpg

图五

可见运行完全成功。

但是这种使用set命令的方式设置的环境变量只对当前命令行窗口有效。一旦关闭此窗口,再次运行另一个命令行窗口时,PATH环境变量还是原来的值。因此,我们必须在Windows下修改PATH环境变量。步骤如下:

右击桌面“我的电脑”图标->属性->高级->环境变量,就打开了了设置环境变量的对话框。上面部分是为某个用户设置。Windows设计为可多用户使用一台机器,每人一个账户。为某个账户设置的变量只对该用户有效。下面部分是设置系统变量,对系统中的每个用户有效。现在一般电脑都只有一个用户,即Administrator。因此只需要为此账户设置即可。找到PATH环境变量,点“编辑”。在“变量值”框内现有值的后面输入英文输入法的分号,然后添加你想添加的值(在这里是D:\Java\jdk1.6.0_24\bin)。一路确定,OK!

现在再打开一个命令行窗口,输入echo %path%命令查看path的值(或者直接使用path命令亦可)。现在,我们可以看到bin目录已被添加到PATH中,再在任何目录下运行java -version命令,均可成功。如下图所示:

97694380_6.jpg

图六

其实我们执行其他命令都是这个原理。举例来说,当你显示PATH的值时,你会发现第一个值是C:\WINDOWS\system32。在Windows下打开这个目录,你会看到很多可执行文件,它们的名字与我们常用的命令的名字是一致的。也就是说,我们执行这些命令,实际上系统就是根据PATH的这个值找到了相应的可执行文件,再运行这些文件的结果。如attrib.exe文件,它对应于attrib命令,这是显示/设置文件属性的命令,如下图所示:

97694380_7.jpg

图七

现在我们通过命令set path=(等号右边什么都没有,或随便写点东西)来清除PATH的值,再来运行attrib命令试试。如下图所示:

97694380_8.jpg

图八

可以看出,完全相同的命令,现在已无法执行而报错了。

下面再通过命令set path=c:\windows\system32(Windows下不区分大小写,因此windows与WINDOWS都正确),把attrib.exe文件所在的路径添加到PATH中,再运行试试。如下图所示:

97694380_9.jpg

图九

很显然,目前已能够正确运行。另外一个常见的例子就是format.com(.com文件是另一种可以执行的文件),不过此命令是用来格式化的,实验时请小心,不要由于失误而格式化了某个盘。而且,根据上面的描述,在PATH环境变量未正确配置的时候,写出这些文件的绝对路径(完整路径),亦可以正确执行。读者可自行实验(在此声明,由于已事先提醒,因此凡是由于误操作带来的数据丢失,概不负责!)。

二、内部命令、外部命令和批处理文件

我们现在启动一个命令行窗口,按上述的方法把PATH的值全部清除,然后再运行dir、cd等命令。出乎我们意料的是,它们仍然能够正确执行。这,又是什么原因呢?

我们来看看刚才那些报告错误的信息,它们都提到了“内部命令”和“外部命令”的概念。那么什么是内部命令和外部命令呢?

内部命令和外部命令是DOS(disk operating system,微软早期基于命令行的操作系统)时代的概念,百度百科的解释是:内部命令是随每次启动的COMMAND_COM装入并常驻内存,而外部命令是一条单独的可执行文件。粗略地讲,所谓内部命令就是最核心、使用最多的命令。为了提高响应速度,系统一启动,这些命令就被加载到内存,因此可以迅速、直接地执行;而外部命令由于使用相对较少,就不预先加载到内存,当用户使用时,再到硬盘上(c:\windows\system32)找相应的可执行文件,然后加载到内存执行。像dir、cd等都是内部命令,而诸如attrib、format等都是外部命令。尽管DOS的时代早已成为了历史,但某些操作却必须在命令行模式下完成,对专业人士来说更是如此。因此,Windows产品一直保留着命令行模式这个工具。

另外一个概念就是批处理文件(后缀名为.bat,来源于批量的英语单词batch),它是另外一种可以执行的文件。简单地说,批处理文件包含了很多DOS命令。文件执行时,就一条一条地执行这些命令。不一定顺序执行,像通用的程序设计语言一样,它也有自己的流程控制。批处理文件创建很简单:用任何一个文本编辑器(如Windows的记事本)创建一个文本文件,然后把后缀名改为.bat即可。创建好的批处理文件,你也可以用文本编辑器打开,查看它的“源代码”。

三、关于CATALINA_HOME环境变量的设置(适用于tomcat6/7)

Tomcat是一个免费开源的Servlet/JSP容器,深受广大JAVA初学者喜爱。这其中需要设置CATALINA_HOME环境变量,值为tomcat安装目录(我的是d:\tomcat7),否则会出现如下的错误信息:

97694380_10.jpg   图十

这句话的意思就是没有正确设置CATALINA_HOME环境变量,而此变量是运行Tomcat所必须的。而当你不理会这个信息,在命令行窗口把当前目录切换到tomcat安装目录下的bin目录下,再执行批处理文件startup.bat来启动tomcat时,发现也可以成功。难道现在不需要CATALINA_HOME环境变量了吗?

实际上,在startup.bat中,首先判断CATALINA_HOME是否为空。若为空,就把当前目录设为CATALINA_HOME的值。然后查找CATALINA_HOME所指示的目录下是否有个bin目录,此bin目录下是否有个叫做catalina.bat的批处理文件(此文件负责启动tomcat)。若没有,则把当前目录的父目录设为CATALINA_HOME的值,再重复上述的查找。若仍失败,就报图十所示的错误。因此,当你在tomcat安装目录下的bin目录下运行startup.bat文件时,它就会按照上面所说的第二种方式自动正确设置CATALINA_HOME的值,因为catalina.bat文件就在tomcat安装目录下的bin目录里。

虽然在此种情况下能正确运行,但还是建议你正确设置CATALINA_HOME环境变量。与PATH不同的是,PATH系统本身就由,而CATALINA_HOME需要你自己“新建”,在“环境变量”窗口点“新建”即可。

为了能够在任何目录下都能运行tomcat安装目录下bin目录里的批处理文件,如startup.bat,可把此目录添加到PATH环境变量中(我的是d:\tomcat7\bin)。为了提高灵活性,可在PATH环境变量的最后添加上%catalina_home%\bin(与前一个值之间不要忘了用英文的分号隔开)。把catalina_home放置在两个百分号之间,表示引用这个环境变量的值。这样,当你把tomcat的安装目录换了以后,就只需要修改catalina_home的值,而不需要修改PATH的值了,因为它可以自动计算出新的正确值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java path环境变量_Windows下PATH等环境变量详解 的相关文章

  • 图的基本操作(无向图)

    图的定义 图 Graph 在是一种较线性表和树更为复杂的数据结构 在线性表中 数据元素之间是被串起来的 只有线性关系 每个数据元素只有一个直接前驱和一个直接后继 在树形结构中 数据元素之间有着很明显的层次关系 并且每一层的数据元素可能和下一
  • 证明:Java代码在执行过程中,并不一定是从上到下,每句代码依次顺序执行的

    今天给大家带来一个毁三观的结论 Java代码在执行过程中 并不一定是从上到下 每句代码依次顺序执行的 这是不是很颠覆你的认知 计算机在执行程序的时候 并不会严格按照代码来顺序执行 比如第一个指令 是从内存中读取一个数据 而第二个指令 是寄存
  • zabbix设定监控指标每天调用一次

    添加了数据库备份的监控项 因为备份每天只做一次 如果一直取数意义不大 所以设定在每条早上9点取一次值 设定方式如图 更新间隔需要修改为0 否则还会按照间隔获取信息 选择调度 h表示小时 h9表示每天九点
  • 蓝桥杯第十一届青少年Python组省赛试题

    选择题答案 ADDCA s input if s 2 er or s 2 ly s s 2 elif s 3 ing s s 3 print s n int input cnt 0 for i in range 2 n s 0 for j
  • Unity平台如何实现RTSP转RTMP推送?

    技术背景 Unity平台下 RTSP RTMP播放和RTMP推送 甚至包括轻量级RTSP服务这块都不再赘述 今天探讨的一位开发者提到的问题 如果在Unity下 实现RTSP播放的同时 随时转RTMP推送出去 RTSP转RTMP 在原生环境下
  • 开始做一个平台程序

    先赚个积分吧 公司的项目 从0开始
  • BP、CNN、ResNet:图片分类FashionMnist和CIFAR-10

    源码 GitHub jeanMrx FashionMnist CIFAR10 一 实验目的 理解BP神经网络和卷积神经网络的结构和原理 掌握反向传播学习算法对神经元的训练过程 了解损失函数的反向传播和梯度下降 通过构建BP神经网络和卷积神经
  • Ubuntu Desktop 启用远程桌面(Vino和TigerVNC方式)

    文章目录 前言 使用Vino方式 无显示器使用 使用TigerVNC方式 前言 在很多领域的生产开发工作中常常需要用到 Ubuntu Desktop 系统 但是在一些日常的工作交流中又离不开Windows系统 这种时候比较常用的解决方案就是
  • ElasticSearch-DSL语句使用-Kibana界面操作

    Query DSL结构化查询介绍 Query DSL是一个Java开源框架用于构建类型安全的SQL查询语句 采用API代替传统的拼接字符串来构造查询语句 目前Querydsl支持的平台包括JPA JDO SQL Java Collectio
  • R语言数据分析案例合集

    案例一 汽车数据可视化分析 R ggplot2 案例二 房价指数的分析与预测 时间序列
  • 简单了解照相机

    以上是随便找网上找的一张正经的照相机图片 如今照相机各种各样 今天我们会简单了解一下照相机的工作原理 涉及的工作原理 主要是这两个原理 话说很早很早的时候 我们的老祖宗 墨子就发现了 用一个带有小孔的板遮挡在墙体与物体之间 墙体上就会形成物
  • idea中使用git stash和git unstash

    一 git中没有提交到本地仓库的改变内容会带到别的分支 git 切换分支时会把未add或未commit的内容带过去 这样可能造成代码覆盖的问题 这个在工作中会经常遇到 二 对本地仓库的文件进行了修改 但没有提交到本地仓库 切换分支时会造成代
  • 小程序微信支付功能逻辑

    官方的思维图在下看不懂 自己整理一份以备后用 1 打开Pay付款页面 2 用订单号 查看订单信息前端展示 3 点击付款按钮 提交订单ID到后台 创建微信预支付交易订单 用JSAPI下单 4 返回创建后的 预支付订单编号信息 存入数据表 5
  • 用Python实现BP神经网络(附代码)

    用Python实现BP神经网络 附代码 大家好 我是毕加锁 锁 今天教大家用Python实现BP神经网络 附代码 用Python实现出来的机器学习算法都是什么样子呢 前两期线性回归及逻辑回归项目已发布 见文末链接 今天来讲讲BP神经网络 B
  • IntelliJ IDEA插件开发指南(一)

    概要 工欲善其事必先利其器 虽然IntelliJ IDEA的功能已经足够的强大 但是也无法满足开发人员想要的一切功能 对于此 IDEA提供了API接口供开发者进行插件开发扩展 但目前来说 网上对于IDEA插件开发的文档大多讲的不是很清楚 自
  • HTML,js,jQuery的1+S证书学习资料

    诸位 我是曜耀 今天为大家带来是关于大学期间考1 s证书的学习资料 1 S是教育部 国家发展改革委 财政部 市场监管总局联合印发 关于在院校实施 学历证书 若干职业技能等级证书 制度试点方案 部署启动 学历证书 若干职业技能等级证书 简称1
  • ‘gbk‘ codec can‘t decode byte 0xae in position 199: illegal multibyte sequen 问题解决

    在 机器学习实战 第四章中 使用朴素贝叶斯过滤垃圾邮件出现了 gbk codec can t decode byte 0xae in position 199 illegal multibyte sequen 错误 原因在于 email g
  • js url上添加随机数防止缓存

    1 通常使用ajax访问url添加 JS ajax请求地址后加随机参数 比如XXXX t new Date getTime 或者 在url后面加一个随机数 url test jsp number Math random 浏览器为了提高用户访
  • 芯片细分领域

随机推荐

  • 苹果笔记本怎么查看计算机基本信息,如何查询苹果电脑型号_查询苹果电脑型号的方法...

    新买入苹果电脑后无法确认是什么型号 虽然可以通过电脑外箱和机身标签识别 但此不够内容不够详细 那么还有什么办法查询苹果电脑型号呢 Mac的机型信息并不是直接可以在电脑的系统信息中查询到 而是根据Mac的信息来对比查询 下面快来看看操作方法
  • Android开发之合并文件的几种方式

    下面介绍合并文件的几种方式 并通过合并amr文件来举例介绍合并文件的具体流程 amr格式的文件头是6字节 所以在进行文件合并的时候要减去除第一个文件以外的其他文件的文件头 注意 不同文件的文件头是不一样的 所以在合并的时候根据不同文件相应的
  • 字节流

    import java io FileInputStream import java io FileNotFoundException import java io FileOutputStream import java io IOExc
  • AltiumDesigner安装及基本使用

    目录 一 Altium Designer2018下载安装 二 配置Altium Designer 三 元件库下载安装 四 简单使用软件画出基本电路图 五 总结心得 六 参考链接 一 Altium Designer2018下载安装 百度网盘下
  • 多模态模型学习1——CLIP对比学习 语言-图像预训练模型

    多模态模型学习1 CLIP对比学习 语言 图像预训练模型 学习前言 什么是CLIP模型 代码下载 CLIP实现思路 一 网络结构介绍 1 Image Encoder a Patch Position Embedding b Transfor
  • SQL中with as 用法

    with temp1 as select from table limit 10 Select from temp1 也可以嵌套 with temp1 as select from table limit 10 temp2 as selec
  • js添加类名的两种方法

    1 通过className来添加 删除类名 添加类名 获取元素 className 类名1 类名2 多个类名用空格隔开 移除类名 获取元素名 className 直接等于一个空字符串即可删除类名 2 通过classList来添加 删除类名
  • GLES2.0中文API-glHint

    名称 glHint 指定特定于实现的提示 C规范 void glHint GLenum target GLenum mode 参数 target 指定一个符号常量 指示要控制的行为 接受GL GENERATE MIPMAP HINT mod
  • 线程安全的单例模式

    线程安全的单例模式 单例模式 属于创建类型的一种常用的软件设计模式 通过单例模式创建的类在当前进程中只有一个实例 一份资源只能被申请加载一次 如何实现 饿汉模式 资源在程序初始化的时候就去加载 后边使用的时候直接使用 使用会非常流畅 但是有
  • 霍布森选择效应(Hobson choice Effect)

    1631年 英国剑桥商人霍布森从事马匹生意 他说 你们买我的马 租我的马 随你的便 价格都便宜 霍布森的马圈大大的 马匹多多的 然而马圈只有一个小门 高头大马出不去 能出来的都是瘦马 赖马 小马 来买马的左挑右选 不是瘦的 就是赖的 霍布森
  • PHP定时任务脚本模板带日志记录

  • 超市商品信息管理系统/超市管理系统的设计与实现

    摘 要 随着现在网络的快速发展 网上管理系统也逐渐快速发展起来 网上管理模式很快融入到了许多国家的之中 随之就产生了 超市商品信息管理系统 这样就让超市商品信息管理系统更加方便简单 对于本超市商品信息管理系统的设计来说 系统开发主要是采用j
  • 【线性代数】第一章 1.3逆矩阵

    上一篇 1 2 高斯消元法与矩阵的初等变换 目录 一 逆矩阵的概念与性质 二 用行初等变换求逆矩阵 一 逆矩阵的概念与性质 前面我们定义了矩阵的加法 减法和乘法三种运算 自然的 欲在矩阵中引入类似于除法的概念 其关键在于引入类似于倒数的概念
  • STM32入门之GPIO详解

    一 GPIO基础知识 大家在做单片机相关项目开发时候 相信大家拿到板子的第一件事就是点亮开发板上的LED指示灯 也就是说我们第一件事就是对单片机的IO口进行操作 不管是51单片机还是32单片机亦或是arduino 我们想要控制一个最基本的外
  • Markdown编辑器【写作技巧】

    CSDN的MD编辑器 写作技巧 0 Markdown的公式编辑技巧 单个公式用 begin equation 多行公式 begin align 或者 begin array 1 在线LaTeX公式的编辑器 2 继续补充 color Oran
  • 【转】OCaml基础知识

    出自 http www nirvanastudio org ocaml the basics of ocaml html 注释 OCaml的注释是用 and 来分隔的 如下 这是一个单行注释 这是一个 多行 注释 换句话说 注释的方式和原始
  • 求最大公约数的快速算法

    stein 算法求最大公约数 和欧基里德算法相比 效果更好 主要思想如下 化归思想 1 m为奇数时 1 n也为奇数 gcd m n gcd m n 2 m n 2 2 n为偶数 gcd m n gcd m n 2 2 m为偶数时 1 n也为
  • 【Python】批量修改图片文件名和xml文件信息

    在使用tensorflow进行数据训练时 由于原图片文件名较繁琐 且由于根据原图片名生成的xml标签文件中生成了包含filename的标签属性 不利于后期测试训练效果 故通过Python代码对图片名和xml文件信息进行批量修改为由0开始的顺
  • std::thread使用

    C 11新特性 http www cnblogs com pzhfei archive 2013 03 02 CPP new feature html section 7 1 C 11新特性学习笔记 http blog csdn net h
  • java path环境变量_Windows下PATH等环境变量详解

    在学习JAVA的过程中 涉及到多个环境变量 environment variable 的概念 如PATH 正确地配置这些环境变量 是能够顺利学习 开发的前提 而经常出现的问题是 有的学习者能够按照提示一步一步地正确配置 但时间一长就忘了 出