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

Thinking in Java对classpath作用的解释

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

  首先,它找到环境变量CLASSPATH(将Java 或者具有Java 解释能力的工具——如浏览器——安装到机器中时,通过操作系统进行设定)。CLASSPATH 包含了一个或多个目录,它们作为一种特殊的“根”使用,从这里展开对.class 文件的搜索。从那个根开始,解释器会寻找包名,并将每个点号(句点)替换成一个斜杠,从而生成从CLASSPATH 根开始的一个路径名(所以package foo.bar.baz 会变成foo\bar\baz 或者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:\DOC\JavaT\com\bruceeckel\util
若通过它往回走,就会发现包名com.bruceeckel.util,但路径的第一部分又是什么呢?这是由CLASSPATH
环境变量决定的。在我的机器上,它是:
CLASSPATH=.;D:\JAVA \LIB;C:\DOC\JavaT

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

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

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


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

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所指定的目录,并检视子目录java\util是否存在,然后找出名称吻合的已编译文件(.class文件)。如果没有找到就会报错!
     CLASSPATH有点像c\c++编译器中的INCLUDE路径的设置哦,是不是?当c\c++编译器遇到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:\java\jdk1.5”,以下简称“%java_home%”。

“path”,设置jdk中各个程序的路径,“%java_home%\bin;%java_home%\jre\bin;”

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

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

classpath= ".;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar"

java_home = "C:\Program Files\Java\jdk1.5.0"

path ="%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin "

时间: 2024-09-29 21:29:47

Java中设置classpath、path、JAVA_HOME的作用的相关文章

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

1.classpath是用来找编译后的class文件的,操作系统或者编译器等会在这些目录下寻找对应的.class文件 2.path时用来找命令行执行文件的,操作系统或者其他软件会在这些目录下找对应的命令行执行文件 3.JAVA_HOME是用来找JDK的 .PATH环境变量.作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序.我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常

java中设置代理的两种方式

1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式.直接上代码. 2 采用设置系统属性 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import jav

java中设置session过期时间

Web容器 apache-tomcat-8.0.26\conf\web.xml中设置 <session-config> <!-- 时间单位为分钟 --> <session-timeout>30</session-timeout> </session-config> Web工程 在项目工程的web.xml中设置 <session-config> <!-- 时间单位为分钟 --> <session-timeout>

JAVA基础学习——1.3 关于JAVA环境变量设定 Path,Java_Home,ClassPath

在安装完JDK以后,要设定JAVA环境变量. 刚接触的时候,我很困惑,这特么什么玩意啊,然后知其然不知其所以然的 按照说明做完了却不知道为什么这么做,这里简单做一些总结说明. 首先,什么是环境变量 环境变量是指在操作系统中用来指定操作系统运行环境的一些参数. 其实跟程序里的变量意思差不多, 程序中的变量嘛,就是代表着在程序中具有什么意义的一串字符的一个简短的字符串而已. 环境变量,就是操作系统中使用的变量而已. 至于这些变量有什么作用,和具体变量名相关. 那么介绍一下我们将要设置的三个环境变量

《Java中的抽象类及抽象类的作用》

1 //抽象类示例: 2 abstract class Shape1 3 { 4 { 5 System.out.println("执行Shape的初始化块..."); 6 } 7 private String color; 8 //定义一个计算周长的抽象方法, 9 public abstract double calPerimeter(); 10 //定义一个返回形状的抽象方法, 11 public abstract String getType(); 12 //定义Shape的构造器

Java中关键字volatile 和 synchronized 的作用和区别

volatile是变量修饰符,而synchronized则是作用于一段代码或方法:如下三句get代码: 1 int i1; 2 int geti1() {return i1;} 3 4 volatile int i2; 5 int geti2() {return i2;} 6 7 int i3; 8 synchronized int geti3() {return i3;} geti1() 得到存储在当前线程中i1的数值.多个线程有多个i1变量拷贝,而且这些i1之间可以相互不同.换句话说,另一个

在Java中设置Imageview的背景

============问题描述============ 对一个ImageView组件我进行了如下设置,点击图片出现以image_background.jpg图片背景 <item name="android:background">@drawable/image_select_background</item> 其中image_select_background.xml代码如下 <?xml version="1.0" encoding=

java中得到classpath和当前类的绝对路径的一些方法(路径中的%20&quot;进行替换空格)

原网址:http://blog.csdn.net/shendl/article/details/1427475 (注意:利用下面方式得到路径,如果路径中有空格字符, 那么会有"%20"进行替换, 所以得到之后再将"%20"替换成空格) 下面是一些得到classpath和当前类的绝对路径的一些方法.你可能需要使用其中的一些方法来得到你需要的资源的绝对路径. 1,FileTest.class.getResource(""):      FileTes

java中this 和 super关键字的作用

emmmmmm也真的是好久没有写过java了,因为项目需要, 最近又必须重新拾起来了,虽然好多东西也都忘得差不多了.... 然后发现 竟然把super和this傻傻分不清.... 开个帖子记录一下: 一.this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变量: (2)this调用本类中的其他方法: (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行. 应用一 1 Public Class Student { 2 int age; //定义一个成员变量