package com.cht.classLoader;
import java.util.Date;
/**
* java中默认的有三种类型加载器。
* 分别是:系统类加载器(应用类加载器)、扩展类加载器、引导类加载器。
* @author Cht_t
*
*/
public class Test {
public static void main(String[] args) {
/**
* 系统类(应用)加载器 一般用户自定义
* 它负责加载Java的标准扩展,一般使用Java实现的,
* 负责加载jre/lib/ext中的类。和普通的类加载器一样。
*/
System.out.println(Test.class.getClassLoader());
//输出结果:sun.misc.Launcher$AppClassLoader@2a139a55
/**
* 扩展类加载器
* 它负责加载Java的标准扩展,一般使用Java实现的,负责加载jre/lib/ext中的类。
* 和普通的类加载器一样。
*/
System.out.println(Test.class.getClassLoader().getParent());
//输出结果:sun.misc.Launcher$ExtClassLoader@7852e922
/**
* 引导类加载器
*它负责加载jdk中的系统类,是用C语言实现的。对于java程序无法获得它,
*像上文中获得扩展类加载器的父类加载器是null。
*像String,Integer,Double类都是由引导类加载器加载的。
*/
Date d = new Date();
System.out.println(d.getClass().getClassLoader());
System.out.println(String.class.getClassLoader());
//输出结果:null null
/**
* 类加载机制的原理是双亲委派机制。
* 当加载一个类时,首先把机会让给父类,先让父类加载,若是父类中不能加载,才会自己再加载。(这是孝顺型的,先想到父类)
* 而那个Tomcat加载器则恰恰相反。
* 当加载一个类时,首先自己加载,自己加载不了,则再去找父类帮忙。(这个忘恩型的,先想到自己)
*/
}
}