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

一、基本原理

首先看PATH环境变量。

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

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

图一

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

图二

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

图三

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

图四

看来这次执行成功了。命令结果显示当前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命令试试。结果如下图所示:

图五

可见运行完全成功。

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

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

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

图六

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

图七

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

图八

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

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

图九

很显然,目前已能够正确运行。另外一个常见的例子就是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),否则会出现如下的错误信息:

   图十

这句话的意思就是没有正确设置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的值了,因为它可以自动计算出新的正确值。

2012-08-07 06:45:17

写得非常好,java设置环境变量还要设置 JAVA_HOME CLASSPATH,不明白这两个变量是干什么用的..

2012-08-10 17:16:42

回复 fqogiytbn:[7楼]

谢谢支持!JAVA_HOME的值是JDK的安装目录,例如本文中的D:\Java\jdk1.6.0_24。运行Tomcat需要设置此变量。另外类似于文中讲到的CATALINA_HOME,配置好JAVA_HOME后,就可以用以下方式把JDK的bin目录添加到PATH中:%JAVA_HOME%\bin(注意要与前面的值用英文分号分开)。这样当更改了JDK的安装目录后,就只需改JAVA_HOME,而无需改PATH了,因为操作系统可以自动算出新的bin目录。CLASSPATH,顾名思义,就是指要在哪里去寻找字节码文件(.class文件),因为我们知道JAVA程序的执行实际上是执行这些字节码文件。CLASSPATH有一点容易出错的是,若不设置,它的默认值是当前目录;而你设置后,又没有把当前目录(“.”,即英文的点)添加进去,则它就不再包含当前目录(这点与PATH不同,PATH总是包含当前目录)。这样会导致莫名其妙的找不到类的错误。因此,设置CLASSPATH时,一般先把添加当前目录,再添加其他值(不同的值之间用英文分号分开)。一般JAVA初学者不必自己设置CLASSPATH。当你需要用到第三方jar包(如JDBC驱动程序),而又没有使用eclipse、ant等开发工具,只是纯粹地使用javac、java等命令开发程序时,需要手动设置CLASSPATH。

Windows下PATH等环境变量详解

在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH.正确地配置这些环境变量,是能够顺利学习.开发的前提.而经常出现的问题是:有的学习者能够按照提示 ...

【转】Windows下PATH等环境变量详解

[转]“肖凡的专栏” 博客,请务必保留此出处http://legend2011.blog.51cto.com/3018495/553255 在学习JAVA的过程中,涉及到多个环境变量(environm ...

Windows下的SVN环境搭建详解

前言:最近因为要和其他人合作开发项目,所以花时间搭建了SVN的环境. 因为是初次使用SVN,对于SVN的环境搭建很不熟悉,再加上网上的教程都介绍的比较粗略,导致前前后后重做了几次. 当然最终是搭建成功 ...

Maya 常用环境变量详解

Maya 常用环境变量详解 前言: Maya 的环境变量让用户可以很方便的自定义 Maya 的功能. 在 Maya 的 Help 帮助文档中有专门的一个章节< Environment Varia ...

net core体系-web应用程序-4net core2&period;0大白话带你入门-5asp&period;net core环境变量详解

asp.net core环境变量详解   环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的 ...

asp&period;net core环境变量详解

环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的环境变量在其它文件里面,不多说了,有兴趣的 ...

如何查找YUM安装的JAVA&lowbar;HOME环境变量详解

如何查找YUM安装的JAVA_HOME环境变量详解  更新时间:2017年10月27日 09:44:56   作者:铁锚   我要评论 这篇文章主要给大家介绍了关于如何查找YUM安装的JAVA_HOM ...

PATH环境变量和CLASSPATH环境变量详解

大凡装过JDK的人都知道要安装完成后要设置环境变量,可是为什么要设置环境变量呢?环境变量有什么作用? 1)PATH详解: 计算机安装JDK之后,输入“javac”“java”之类的命令是不能马上被计算 ...

Windows系统中path环境变量详解

在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH.正确地配置这些环境变量,是能够顺利学习.开发的前提.而经常出现的问题是:有的学习者能够按照提示 ...

随机推荐

Maven学习(一)安装 配置

安装环境 windowXP 32 下载地址 http://maven.apache.org/download.cgi 安装包 apache-maven-3.2.3.zip 一.安装 Step1 解压缩 ...

unity3d web&period;config设置

原地址:http://www.cnblogs.com/88999660/archive/2013/03/22/2976105.html <?xml version="1.0" ...

&lbrack;LeetCode&rsqb; 310&period; Minimum Height Trees 解题思路

For a undirected graph with tree characteristics, we can choose any node as the root. The result gra ...

Scala的类中定义内部类实战

scala独特之处在于可以在类中定义内部类,起到对外屏蔽作用. 类中默认都是public权限.后面将讲解如何引入接口,scala中的接口与java点区别.特质/接口(Trait)

hdu4705(树形dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4705 题意: 有一颗树, 选出3个点. 不在同一条路径上的集合数. 分析:这题主要能逆向思考下,用总的 ...

HI3531例子程序说明

Hisilicon Hi35xx 样例程序使用说明 1. 样例程序文件结构说明    sample            # MPP 样例程序     |-- common       # hi35x ...

线段树及Lazy-Tag

一:线段树 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点.使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(lo ...

Swift 里 Array (四) Accessing Elements

根据下标取值 关键代码如下: func _getElement( _ index: Int, wasNativeTypeChecked: Bool, matchingSubscriptCheck: _ ...

【Redis使用系列】使用Redis做防止重复提交

前言 在平时的开发中我们都需要处理重复提交的问题,避免业务出错或者产生脏数据,虽然可以通过前端控制但这并不是可以完全避免,最好的方式还是前后端均进行控制,这样的话就可以更有效,尽可能全面的去减少错误的 ...

c语言path环境变量,Windows下PATH等环境变量详解(转载)相关推荐

  1. linux paste 变量,Linux下的paste合并命令详解

    paste单词意思是粘贴.该命令主要用来将多个文件的内容合并,与cut命令完成的功能刚好相反. 粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同.paste将按行将不同文件行信息放在一 ...

  2. Windows下VTK6.0.0安装详解(CMake使用说明)

    操作系统:Windows7,用到工具:Visual studio.CMake. 1.准备工作 VTK下载: 下载最新VTK稳定版(6.0.0,截至2013年7月)http://www.vtk.org/ ...

  3. windows下创建进程,CreateProcess()详解及用法

    windows下想要创建一个子进程不如linux的fork函数来得方便,通过CreateProcess函数创建一个新的进程,函数的定义如下 [cpp]  view plain copy BOOL Cr ...

  4. jsoncpp在linux和windows下的编译及使用详解

    一:摘要 1. JSON是一种轻量级的数据传输格式,全称为:JavaScript Object Notation,官方网址: http://www.json.org/json-zh.html 3. J ...

  5. tinyxml在linux和windows下的编译及使用详解

    一:摘要 1.XML全称EXtensible Markup Language,翻译为可扩展标记语言,XML文件通常就是一个文本文件,可以使用任何编码 2.TinyXML是一个开源的C++用来处理XML ...

  6. Windows下SVN权限配置过程详解

    本节讲解一下Windows下SVN权限配置说明,针对的是一个目录下多库的情况,下面是具体的介绍,希望通过本文的学习,你能够对SVN权限配置问题有更加深刻的认识. 1.本文档适用于对Subvesion的 ...

  7. windows下python安装pip方法详解

    关于python 中pip版本过低,每次都需要升级的问题 注意:在安装python的过程中一定不要勾选pip选项,python安装完毕后,再利用下方的pip的安装方法一 python安装pip 1.前 ...

  8. Windows下安装Rabbit MQ步骤详解

    2019独角兽企业重金招聘Python工程师标准>>> 一.描述 Rabbit MQ是由Eralng语言开发的,因此在使用Rabbit MQ之前需要安装Eralng环境.通过下面两个 ...

  9. windows下mysql主从同步_详解windows下mysql的主从同步

    半路出家到Java,刚开始听说到说程序支持读写分离感觉特别高大上,也一直没接触 偶然的机会接触到了,就一定得记下来. 今天先讲讲数据库的主从同步,两个好处: 是读写分离可以用上.比如 写操作就写到主数 ...

最新文章

  1. Cocos2d-x3.1颗粒使用
  2. Exception: This is not supported, use MenuItemCompat.getActionProvider()的处理
  3. dom定义了访问html文档对象的,HTML DOM (文档对象模型)
  4. android json 解析,android json解析 泛型
  5. Hadoop 安装目录及配置
  6. asp.net学习之再论sqlDataSource 2
  7. mysql data to long_mysql 当插入中文字段时发生“data too long for column”错误
  8. Python产生随机数(转)
  9. 人工智能时代!Python跃升编程语言第一名!
  10. BAT中如何使用for循环
  11. 从腾讯云迁移到腾讯云,开心消消乐的云端迁移战事
  12. 极客大学python进阶训练营_极客大学Python进阶训练营新版2.0
  13. linux中文件颜色,蓝色,白色等各自代表的含义
  14. 组策略怎么禁用计算机管理,如何打开管理员禁用的组策略?
  15. 系统提供人民币(CNY)美元(USD)英镑(GBP)价值转换
  16. 了解Maven的<relativePath/>标签
  17. 阶段二第一部分:第2章 Nginx进阶与实战
  18. 1086 Tree Traversals Again (25分)
  19. 产品周报第27期|会员新增拉黑用户权益;CSDN APP V5.1.0版本发布……
  20. 虚拟机由于硬盘存储空间过满导致启动异常+虚拟机扩容

热门文章

  1. 阿里靠什么支撑 EB 级计算力?
  2. Android开发之使用Web Service进行网络编程
  3. uniapp editor编辑器
  4. 蓝牙鼠标windows linux,Windows+Linux+MacOS三大系统共用蓝牙鼠标
  5. 身份证某几位用*代替
  6. Java身份证、手机号码用*隐藏中间几位
  7. Java 简单图片 马赛克,黑白画,珠纹化,油画效果等处理技术 原理及实现 (简单UI)
  8. RocketMQ(四):生产者消息数据写入实现细节
  9. password unchanged Authentication token manipulation error
  10. 附加类型”XXXX“的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 “Attach“ 方法或者将实体的状态设置为 “Unchanged“ 或 “Modified“