JAVA中的加载器

        java 虚拟机中可以安装多个类加载器,系统默认三个主要的类加载器,每个类负责加载特定位置的类。

BootStrap,  ExtClassLoader,  AppClassLoader

        BootStrap ---c++ 2进制代码

        ExtClassLoader -----java类

        AppClassLoader-----java类



package casic.com.base.test3;
/**
 * Copyright © 2018 eSunny Info. Tech Ltd. All rights reserved.
 * 
 * @Package: casic.com.base.test3 
 * @author: lh   
 * @date: 2018年5月1日 下午7:50:26
 */
public class ClassLoaderTest {
	public static void main(String[] args) {
		System.out.println(ClassLoaderTest.class.getClassLoader().getClass().getName());
		
		/**
		 * System 是Bootstrap 加载器加载的
		 */
		//System.out.println(System.class.getClassLoader().getClass().getName());
		ClassLoader loader = ClassLoaderTest.class.getClassLoader();
		while(loader != null) {
			System.out.println(loader.getClass().getName());
			loader = loader.getParent();
		}
		System.out.println(loader);
	}
}

        ClassLoaderTest 默认是AppClassLoader加载
        如果把ClassLoaderTest 打成jar包放到 jdk 的jar/lib/ext包下  则有ExtClassLoader 加载
        这是java加载器的加载机制。

        
         1.首先当前线程的类加载器去加载线程中的第一个类,
         2.如果类A中引用了类B,则使用加载类A的加载器去加载类B
         3.还可以直接调用ClassLoader.loadClass() 方法来指定某个类加载器去加载某个类
        
          每个类加载器加载类时,会委托给其上级类加载器,如果所有的祖宗类加载器都没有加载到类,则回到发起者类加载器,如果还没有加载到类,则抛出ClassNotFoundException,不会再去找发起者类加载器的儿子,没有getChild方法。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值