classpath

来源:互联网 发布:厦门广电网络 电话多少 编辑:程序博客网 时间:2024/05/18 02:53
Classpath是Java中的重要概念,它描述了Java虚拟机在运行一个Class时在哪些路径中加载要运行的类以及运行的类要用到的类。简单的说,就是像操作系统的path,只不过这个classpath是由Java的虚拟机来使用查找需要加载的类,而操作系统的path是由操作系统用来查找用户输入的可执行程序。同path一样,classpath也是一个环境变量,可以通过set命令来设置。

Classpath的顺序和类版本冲突

Java虚拟机在加载类的时候查找classpath是有顺序的,如果在classpath中有多个条目都有同一个名称的类,那么在较前位置的类会被加载,后面的会被忽略。这种按照顺序的类加载可能会导致类的版本冲突。例如classpath=c:\servlet2.2\servlet.jar;c:\servlet2.3\servlet.jar,那么在实际应用的过程中,你使用的是servlet2.2,而不是servlet2.3。很多时候如果不注意这一点,可能会导致奇怪的异常。

什么是Codebase

使用Java语言编写的程序,不仅可以在本地的classpath中加载类,也可以根据需要从网络上下载类。为了使Java程序可以从网络上下载类,我们需要使用codebase,codebase指定了Java程序在网络上何处可以找到需要的类。

不仅在Applet中可以使用codebase,在Application中也可以使用codebase。这样Application除了可以使用classpath中的类,还可以使用网络上的类。例如:
java -classpath c:\work\classes-codebase http://www.company.com/classes Sample
应用程序Sample不仅可以使用c:\work\classes中的类,还可以使用http://www.company.com/classes中的类。

Classpath和codebase的关系

既然Java虚拟机即可以在classpath中加载类,又可以在codebase中加载类,那么classpath和codebase是什么关系呢?实际上,Classpath和codebase都是由系统类加载器(ClassLoader)使用的。类加载器在加载一个类的时候,首先在classpath中查找需要的类,然后在codebase中查找,第一个被查找到的类会被加载。例如,在早期的JDK版本中,缺省codebase是空值,如果没有在classpath中指定“.”(当前目录),运行当前目录下的javaclass时会出现ClassNotFoundException;而在晚些版本中,缺省codebase是“.”,所以即使不在classpath中加入“.”,当前目录下的javaclass仍然可以正常运行


CLASSPATH是什么?它的作用是什么?
   它是javac编译器的一个环境变量。
   它的作用与import、package关键字有关。
    当你写下improtjava.util.*时,编译器面对import关键字时,就知道你要引入java.util这个package中的类;但是编译器如何知道你把这个package放在哪里了呢?所以你首先得告诉编译器这个package的所在位置;如何告诉它呢?就是设置CLASSPATH啦:)如果java.util这个package在c:/jdk/目录下,你得把c:/jdk/这个路径设置到CLASSPATH中去!当编译器面对importjava.util.*这个语句时,它先会查找CLASSPATH所指定的目录,并检视子目录java/util是否存在,然后找出名称吻合的已编译文件(.class文件)。如果没有找到就会报错!
   CLASSPATH有点像c/c++编译器中的INCLUDE路径的设置哦,是不是?当c/c++编译器遇到include<iostream>这样的语句,它是如何运作的?哦,其实道理都差不多!搜索INCLUDE路径,检视文件!
   当你自己开发一个package时,然后想要用这个package中的类;自然,你也得把这个package所在的目录设置到CLASSPATH中去!          
0 0
原创粉丝点击