基础3种类加载器

0.被加载的自定义类

public class ClassLoaderTest {
    public void say() {
        System.out.println("This is Test.");
    }
}

1.系统默认类加载器
BootStrap加载器:主要加载rt.jar,它是Java基础类库,里面有String等类
Extension加载器:主要加载jre/lib/ext目录下jar,其中包含Java的一些加密方法等
Application(System)加载器:加载classpath下jar

2.类加载器三种机制
委托:当加载一个Class时,当前加载器会先委托父加载器加载 如果父加载器没能加载 则自己加载
可见:父加载器加载的Class,对子加载器都是可见的,而子类加载的Class父加载器不知道
单一:一个Class只能被加载一次

3.一些例子

  1. 启动类加载器是获取不到的

    ClassLoader classLoader = String.class.getClassLoader(); (classLoader永远都是null)
    
  2. Extension不能加载classpath下类(这里会有ClassNotFoundException)

    ClassLoader classLoader = AccessBridge.class.getClassLoader();
    Class<?> loadClass = classLoader.loadClass("test.ClassLoaderTest");
    
  3. Application加载classpath下类,完全没有问题

    ClassLoader classLoader = TempDemo.class.getClassLoader();
    Class<?> loadClass = classLoader.loadClass("test.ClassLoaderTest");
    Object obj = loadClass.newInstance();
    Method method = loadClass.getMethod("say");
    method.invoke(obj);
    

4.显示类加载器API调用

Class<?> loadClass = Class.forName("test.ClassLoaderTest");
Object obj = loadClass.newInstance();
Method method = loadClass.getMethod("say");
method.invoke(obj);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值