zoukankan      html  css  js  c++  java
  • Java中设置classpath、path、JAVA_HOME的作用

    hinking in Java对classpath作用的解释

      Java 解释器的工作程序如下:

      首先,它找到环境变量CLASSPATH(将Java 或者具有Java 解释能力的工具——如浏览器——安装到机器中时,通过操作系统进行设定)。CLASSPATH 包含了一个或多个目录,它们作为一种特殊的“根”使用,从这里展开对.class 文件的搜索。从那个根开始,解释器会寻找包名,并将每个点号(句点)替换成一个斜杠,从而生成从CLASSPATH 根开始的一个路径名(所以package foo.bar.baz 会变成fooaraz 或者foo/bar/baz;具体是正斜杠还是反斜杠由操作系统决定)。随后将它们连接到一起,成为CLASSPATH 内的各个条目(入口)。以后搜索.class 文件时,就可从这些地方开始查找与准备创建的类名对应的名字。此外,它也会搜索一些标准目录——这些目录与Java 解释器驻留的地方有关。

    为进一步理解这个问题,下面以我自己的域名为例,它是bruceeckel.com。将其反转过来后,com.bruceeckel 就为我的类创建了独一无二的全局名称(com,edu,org,net 等扩展名以前在Java 包中都是大写的,但自Java 1.2 以来,这种情况已发生了变化。现在整个包名都是小写的)。由于决定创建一个名为util 的库,我可以进一步地分割它,所以最后得到的包名如下:package com.bruceeckel.util;


    现在,可将这个包名作为下述两个文件的“命名空间”使用:
    //: Vector.java
    // Creating a package
    package com.bruceeckel.util;
    public class Vector {
    public Vector() {
    System.out.println(
    "com.bruceeckel.util.Vector");
    }
    }
    //: List.java
    // Creating a package
    package com.bruceeckel.util;
    public class List {
    public List() {
    System.out.println(
    "com.bruceeckel.util.List");
    }
    }
    这两个文件都置于我自己系统的一个子目录中:
    C:DOCJavaTcomruceeckelutil
    若通过它往回走,就会发现包名com.bruceeckel.util,但路径的第一部分又是什么呢?这是由CLASSPATH
    环境变量决定的。在我的机器上,它是:
    CLASSPATH=.;D:JAVA LIB;C:DOCJavaT

    可以看出,CLASSPATH 里能包含大量备用的搜索路径。然而,使用JAR 文件时要注意一个问题:必须将JAR
    文件的名字置于类路径里,而不仅仅是它所在的路径。所以对一个名为grape.jar 的JAR 文件来说,我们的
    类路径需要包括:
    CLASSPATH=.;D:JAVA LIB;C:flavorsgrape.jar

    个人理解说明:其实从上面可以看出,如果你用记事本来写java程序(在Window下),并用cmd命令窗口中

    输入javac,java命令,如果你的代码中用到了其它的jar或者你自己的写的类,但又和你的主程序没在一个包下,这时你就要在classpath中设置你要用到的jar或者自己写的类的路径,让Java在编译器可以找到你要用的东西,如上面例子所示。 在我们用一些工具时,如eclipse中,我们可以把一些Jar包什么的添加进来,然后搜索路径的事工具帮我们做了,所以不用在手动加进去,如下图,eclipse工程中专门有一个文件来记录classpath

    Java中设置classpath、path、JAVA_HOME的作用

    .....................................................................................................................................................

    CLASSPATH是什么?它的作用是什么?
      它是javac编译器的一个环境变量。
      它的作用与import、package关键字有关。
      当你写下improt java.util.*时,编译器面对import关键字时,就知道你要引入java.util这个package中的类;但是编译器如何知道你把这个package放在哪里了呢?所以你首先得告诉编译器这个package的所在位置;如何告诉它呢?就是设置CLASSPATH啦 :) 如果java.util这个package在c:jdk 目录下,你得把c:jdk这个路径设置到CLASSPATH中去!当编译器面对import java.util.*这个语句时,它先会查找CLASSPATH所指定的目录,并检视子目录javautil是否存在,然后找出名称吻合的已编译文件(.class文件)。如果没有找到就会报错!
         CLASSPATH有点像cc++编译器中的INCLUDE路径的设置哦,是不是?当cc++编译器遇到include <iostream>这样的语句,它是如何运作的?哦,其实道理都差不多!搜索INCLUDE路径,检视文件!
         当你自己开发一个package时,然后想要用这个package中的类;自然,你也得把这个package所在的目录设置到CLASSPATH中去!
         CLASSPATH的设定,对JAVA的初学者而言是一件棘手的事。所以Sun让JAVA2的JDK更聪明一些。你会发现,在你安装之后,即使完全没有设定CLASSPATH,你仍然能够编译基本的JAVA程序,并且加以执行。

    .....................................................................................................................................................

    1. PATH环境变量。作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。

    2. CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPATH来寻找类的.class文件。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。

     javac -c  路径 (可以指定class文件存放目录)

     java -cp  路径  (可以指定要执行的class目录)

    3. JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。

    在windows桌面上右击“我的电脑” —> “属性” —> “高级” —> “环境变量”,在“系统变量”里我们可以看到系统的各个环境变量的值。双击某个变量名可以修改变量值,变量值之间用“;”隔开。我们还可以“新建”原先没有的变量。与jdk有关的有3个环境变量;“java_home”,“path”,“classpath”。我的系统中“path”变量已经存在,可以直接添加新值(其它变量值不要动,防止其它程序运行异常),其它两个变量需要新建。

    “java_home”,设置jdk的安装路径,比如“e:javajdk1.5”,以下简称“%java_home%”。

    “path”,设置jdk中各个程序的路径,“%java_home%in;%java_home%jrein;”

    “classpath”,设置java各个类的路径,“.;%java_home%lib;%java_home%lib ools.jar”。前面的“.”不可少,它代表了我们为自己的java类建立的工作路径,其它的是jdk自带的标准类库路径。

    设置好环境变量后按“确定”退出。按“win”+“r”键进入“运行”窗口,运行“cmd”进入DOS窗口,在输入“javac”后回车,如果有显示java的帮助信息,就说明环境变量设置成功。

    classpath= ".;%JAVA_HOME%lib;%JAVA_HOME%lib ools.jar"

    java_home = "C:Program FilesJavajdk1.5.0"

    path ="%JAVA_HOME%in;%JAVA_HOME%jrein "

  • 相关阅读:
    GetForegroundWindow 与 GetActiveWindow 的区别 回复 "delphier" 的问题
    给 TStringGrid 添加鼠标拖动功能 回复 "dxx" 的问题
    Delphi 的编译指令(3): 常用的预定义条件标识符
    Delphi 的编译指令(1): $DEFINE、$UNDEF、$IFDEF、$ELSE、$ENDIF
    用多媒体库 Bass.dll 播放 mp3 [17] : 如何从内存流播放 回复 "小李子子" 的问题
    Delphi 的编译指令(4): 编译指令全表(未完)
    窗口跟随 回复 "heyongan" 的问题
    字符串转换到指定格式的宽字符 回复 "厨师" 的问题
    Dll 使用 PChar 参数的小例子 回复 "linximf" 的问题
    上周热点回顾(5.286.3)
  • 原文地址:https://www.cnblogs.com/bdbw2012/p/3957945.html
Copyright © 2011-2022 走看看