java中JAVA_HOME、PATH及CLASSPATH解析(转载/整理)

转自详解Javahome 与 Path 与ClassPath的含义 (转)

1、首先搞明白内部命令与外部命令的区别 在学习编程过程中经常遇到这样的概念: 内部命令 启动后是常住内存的。 用dos的时候内存都比较小,非常贵,而内部命令启动后是常住内存的。 外部命令 内部直接打就可以执行,外部得进到命令所在的目录或者设置环境变量才可以执行. 在java开发中设置的环境变量就解决这个问题的
2、环境变量的含义(注意:java环境变量设置不分大小写)
1、java_home(不分大小写),其实这是保存你的jdk安装的路径, (这主要是在路径设置时,使其更为直观和方便,使用%%可以实现对其的逆解析) 例如:D:\Java\jdk1.5.0_05
2、Path:外部命令搜索路径(它与ClassPath不同,主要提供的是系统命令执行工具的路径,即用于执行命令的.EXE程序,如java、javac,一般不轻易改变) 例如:D:\Java\jdk1.5.0_05\bin 例如:%JAVA_HOME%\BIN; 当你改变javahome时却不必影响到path你设java_home时不用经常改变path,java_home在path里只是一个相对路径 当你重装jdk的时候只需要修改一下 java_home 不必修改path
3、CLASSPATH:类资源位置搜索路径(这是命令执行工具要执行的类文件的地址,java会首先在当前目录Lib下寻找(一般开始就设定了的),如果未找到,则会到CLASSPATH指定的目录下进行寻找。由于是要执行的。class文件,所以其经常要变化,在使用Eclipse等IDE时,由系统自动的根据其位置进行配置。在非IDE方式下,则需要进行手动的配置。
CLASSPATH: .;D:\jdk1.5.0\lib\tools.jar;D:\jdk1.5.0\jre\lib\rt.jar; 注意细节你的系统可能已经有其他的软件设置了path:

 配置代码
.;D:\jdk1.5.0\lib\tools.jar;D:\jdk1.5.0\jre\lib\rt.jar;
其中的PATH和CLASSPATH是java为所有的应用程序提供的,PATH用于指出命令执行工具的位置(搜寻路径),如java、javac,而ClassPath用于指定需要被命令工具执行的资源文件的位置。
 
当我们在控制台下敲入:

如果未配置path路径,指明java这个命令工具的所在地,则其将无法被找到。

此处可以采用

1、在“我的电脑”属性中配置系统环境变量

2、在控制台中临时配置两种方式(每次都要重新敲入)

一般来说,PATH变量的设置一般不会轻易变化,为了节省精力,一边采用在系统环境变量中配置,以避免重复敲入。

而CLASSPATH变化较大(资源文件的存放),一般会设置一个默认的系统变量,但是在执行命令工具之前,一般要用第2种方式对其进行重新的配置。

3、彻底理解 Javahome 与 Path 与 ClassPath的含义
1、PATH,这个是给WINDOWS操作系统用的,告诉命令行里,执行的命令行工具在那里,比如java,javac这都是命令行工具,你在运行里随便敲一个命令,操作系统怎么就知道你这个命令对应的程序在什么地方,就是通过PATH知道的,你编写JAVA程序的时候,需要编译你的代码,执行编译后的代码,用JAVA和JAVAC这2个工具,那么就必须告诉操作系统,这2个工具放在什么地方。
{WINDOWS提供了一个PATH环境变量,他的作用就是现在这个变量的值路径中去找,如果找到了要运行的EXE就运行,否则失败。如果我们把JAVA里的bin目录这个路径赋给path那么下次我在运行java这个命令的时候,即便是直接输入DOS也能够在path变量中找到JAVA的bin目录下的java指令了。 }
2、JAVA_HOME,是告诉操作系统,JAVAC和JAVA的具体位置的,因为你安装JAVA的路径可能比较长,不方便在PATH里面写,所以就等于是声明一个简写。
例如:你的jdk安装路径为 D:\Java\jdk1.5.0_05 那么 java_home = D:\Java\jdk1.5.0_05; path  = :%java_home%\bin;
3、CLASSPATH,是给JAVAC和JAVA用的,告诉他们,你写的JAVA类,是放在什么地方的。
“假设我们要运行一个JAVA程序(hello.java)就要先把它的class文件移动到JAVA里的bin目录下”,为什么要这样做呢?因为我们在用到java hello.class这条指令的时候,DOS不知道hello.class这个文件在哪里,他就先到当前目录中去找,如果找到就运行,否则失败。当然,如果说hello.java在D盘根目录下,你也可以用java D:\hello.class这条指令来运行,但是每次这样做也确实够麻烦。WINDOWS就提供了这样一个环境变量——classpath,如果没有就应该新建一个。我们把D:\这个路径赋值给classpath,那么下次在运行java hello.java的时候就先在当前目录中到,如果找到就运行,如果找不到就在classpath的值路径下去找,找到就运行,找不到就失败。
     CLASSPATH=.\;%JAVA_HOME%\lib\tools.jar
     要注意的是最前面的".\;",这个是告诉JDK,搜索CLASS时先查找当前目录的CLASS文件——为什么这样搞,这是由于LINUX的安全机制引起的,LINUX用户很明白,WINDOWS用户就很难理解(因为WINDOWS默认的搜索顺序是先搜索当前目录的,再搜索系统目录的,再搜索PATH环境变量设定的)

4、关于Java jdk/bin 目录下的类包 tools.jar 和 dt.jar 的说明,转自http://blog.csdn.net/rockstar541/article/details/7459359

    网上的大部分解释是这样的:dt.jar是关于运行环境的类库,主要是swing的包;tools.jar是关于一些工具的类库。对于后者我赞同,tools.jar中主要是jdk工具,包括javac,java,javap,javadoc等。javac,java,javadoc,很多都熟悉。javap,是java printer的缩写,是jdk自带的一个反编译工具。不过把dt.jar解释成关于运行环境的类库,我是百思不得其解。所谓的运行环境是什么?难道是JRE?本文也希望高手可以给我一个解释。下面是我自己整理的关于dt.jar的资料:     首先看一下SUN对于dt.jar的定义:Also includes dt.jar, the DesignTime archive of BeanInfo files that tell interactive development environments (IDE's) how to display the Java components and how to let the developer customize them for the application。中文翻译过来就是:dt.jar是BeanInfo文件的DesignTime归档,BeanInfo文件用来告诉集成开发环境(IDE)如何显示Java组件还有如何让开发人员根据应用程序自定义它们。这段文字中提到了几个关键字:DesignTime,BeanInfo,IDE,Java components。其实dt.jar就是DesignTime Archive的缩写。那么何为DesignTime。    何为DesignTime?翻译过来就是设计时。其实了解JavaBean的人都知道design time和runtime(运行时)这两个术语的含义。设计时(DesignTIme)是指在开发环境中通过添加控件,设置控件或窗体属性等方法,建立应用程序的时间。与此相对应的运行时(RunTIme)是指可以象用户那样与应用程序交互作用的时间。那么现在再理解一下上面的翻译,其实dt.jar包含了swing控件中的BeanInfo,而IDE的GUI Designer需要这些信息。那让我们看一下dt.jar中到底有什么?下面是一张dt.jar下面的内容截图:
 
 
    从上面的截图可以看出,dt.jar中全部是Swing组件的BeanInfo。那么到底什么是BeanInfo呢?    何为BeanInfo?JavaBean和BeanInfo有很大的关系。Sun所制定的JavaBean规范,很大程度上是为IDE准备的——它让IDE能够以可视化的方式设置JavaBean的属性。如果在IDE中开发一个可视化应用程序,我们需要通过属性设置的方式对组成应用的各种组件进行定制,IDE通过属性编辑器让开发人员使用可视化的方式设置组件的属性。一般的IDE都支持JavaBean规范所定义的属性编辑器,当组件开发商发布一个组件时,它往往将组件对应的属性编辑器捆绑发行,这样开发者就可以在IDE环境下方便地利用属性编辑器对组件进行定制工作。JavaBean规范通过java.beans.PropertyEditor定义了设置JavaBean属性的方法,通过BeanInfo描述了JavaBean哪些属性是可定制的,此外还描述了可定制属性与PropertyEditor的对应关系。BeanInfo与JavaBean之间的对应关系,通过两者之间规范的命名确立:对应JavaBean的BeanInfo采用如下的命名规范:<Bean>BeanInfo。当JavaBean连同其属性编辑器相同的组件注册到IDE中后,当在开发界面中对JavaBean进行定制时,IDE就会根据JavaBean规范找到对应的BeanInfo,再根据BeanInfo中的描述信息找到JavaBean属性描述(是否开放、使用哪个属性编辑器),进而为JavaBean生成特定开发编辑界面。    哈哈。现在可以理解dt.jar了吧。其实里面主要是swing组件的BeanInfo。IDE根据这些BeanInfo显示这些组件以及开发人员如何定制他们。
    dt.jar里面主要是swing组件的BeanInfo。IDE根据这些BeanInfo显示这些组件以及开发人员如何定制他们。

posted on 2013-03-18 11:29  夜月升  阅读(659)  评论(0)    收藏  举报

导航