Java ClassLoader

ClassLoader 作用动态的加载class文件到内存中。

Java 默认提供三个ClassLoader

BootStrapClassLoader

最底层的加载器,负责加载JDK中的核心类库,通过程序可以知道它负责加载那些相关的jar或class

URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();  
for (int i = 0; i < urls.length; i++) {  
    System.out.println(urls[i].toExternalForm());  
}  

或者
System.out.println(System.getProperty("sun.boot.class.path").replaceAll(";", "\n"));
输出:
C:\jdk1.6.0_30\jre\lib\resources.jar
C:\jdk1.6.0_30\jre\lib\rt.jar
C:\jdk1.6.0_30\jre\lib\sunrsasign.jar
C:\jdk1.6.0_30\jre\lib\jsse.jar
C:\jdk1.6.0_30\jre\lib\jce.jar
C:\jdk1.6.0_30\jre\lib\charsets.jar
C:\jdk1.6.0_30\jre\lib\modules\jdk.boot.jar
C:\jdk1.6.0_30\jre\classes

ExtensionClassLoader

加载Java的扩展类,默认加载JAVA_HOME/jre/lib/ext/目下的所有jar.

AppClassLoader

加载应用程序classpath目录下的所有jar和class文件.

Path

  • windows
PATH=%PATH%; C:\Program Files\Java\jdk1.6.0_26\bin
  • Linux
PATH=${PATH}:/home/opt/jdk1.6.0_26/bin

JAVA_HOME
System.getProperty(“java.home”)

  • windows
JAVA_HOME=C:\Program Files\Java\JDK1.6\
  • Linux
JAVA_HOME=/opt/java/jdk_1.6

ClassPath
System.getProperty(“java.class.path”)

  • windows
CLASSPATH=%CLASSPATH%;JAVA_HOME\lib;
  • Linux
CLASSPATH=/home/tester/classes

ClassNotFoundException 和 NoClassDefFoundError

  • 在调用Class.forName() or
    loadClass()方法在运行时动态加载类对象.如果在classpath中没有找到就会抛出ClassNotFoundException
  • 要查找的类在编译的时候是存在的,运行的时候却找不到了,就会抛出 NoClassDefFoundError
    ,如编译了一个类B,在类A中调用,编译完成以后,你又删除掉B,运行A的时候那么就会出现这个错误.

注意
除了Java默认提供的三个ClassLoader之外,用户还可以根据需要定义自已的ClassLoader,而这些自定义的ClassLoader都必须继承自java.lang.ClassLoader类,也包括Java提供的另外二个ClassLoader(Extension ClassLoader和App ClassLoader)在内,但是Bootstrap ClassLoader不继承自ClassLoader,因为它不是一个普通的Java类,底层由C++编写,已嵌入到了JVM内核当中,当JVM启动后,Bootstrap ClassLoader也随着启动,负责加载完核心类库后,并构造Extension ClassLoader和App ClassLoader类加载器.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值