classpath的理解

  jvm的类加载分三中方式:

  系统级别:rt.jar

  扩展级别:java_home/jre/lib/ext/目录下的jar文件

  应用级别:环境变量中的classpath或javac   java中的参数指定java   -classpath   ..     ...

  或者自己写ClassLoader加载。

  前面2中是JVM自动处理。其中第二种是为了处理Java的classpath灾难而提供的解决方案。

  ----------------------------------------------------------------

  实际上java虚拟机是由java luncher初始化的,也就是java(或java.exe)

  这个程序来做的.   虚拟机按以下顺序搜索并装载所有需要的类:

  1,   引导类:   组成java平台的类,   包含rt.jar和i18n.jar中的类.

  2,   扩展类:   使用java扩展机制的类,都是位于扩展目录($JAVA_HOME/jre/lib/ext)

  中的.jar档案包.

  3,   用户类:   开发者定义的类或者没有使用   java   扩展机制的第三方产品.   你必须在

  命令行中使用   -classpath   选项或者使用   CLASSPATH   环境变量来确定这些类的位置.   我

  们在上面所说的用户自己的类就是特指这些类.

  这样,   一般来说,   用户只需指定用户类的位置,   引导类和扩展类是 "自动 "寻找的.

  当你的程序需要第三方的类库支持,   而且比较常用,   就可以采用此种方法.比如常

  用的数据库驱动程序,   写   servlet   需要的   servlet   包等等.   设置方法就是在环境变量中

  加入   CLASSPATH.   然后就可以直接编译运行了.而你的程序只用了些基础类,寻找时,就用不

  着必须设定它.

  ----------------------------------------------------------------

  在执行Java程序的时候,会自动加载程序用中需要的在rt.jar和其他java_home\jre\lib中包含的.jar文件中包含的Java基础类库和一些扩展类库。这些都是JVM自动处理的,对用户来说是透明的。

  如果Java程序中使用到了一些应用级别的类(如第三方的类),可以在javac和java中的-classpath选项中指定它们的搜索路径,或者是自 己写ClassLoader加载,另外也可以设置ClassPath环境变量,在里面指定那些应用级别的类的搜索路径。

  设置ClassPath环境变量不是必须的,只是为了方便使用,设置了ClassPath,JDK就会按ClassPath制定的路径去搜索需要的应用级别的类,而不必每一次都使用-classpath选项或自己写ClassLoader。

  还有需要注意的就是:如果相关的类就在当前工作目录下的话,上面3种方法都可以不要,因为JDK系统会首先搜索会在当前的工作目录中搜索程序相关的类。 (在jdk1.6.0.20下已经验证)

 

转自(http://java.chinaitlab.com/)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值