15-2 反射 ---- 类的加载 与ClassLoader的理解(2)ClassLoader
一、了解:ClassLoader
类加载器作用是用来把类(class)装载进内存的。 JVM 规范定义了如下类型的类的加载器。
二、加载器获取
1.获取一个系统类加载器
• ClassLoader classloader = ClassLoader.getSystemClassLoader();
• System.out.println(classloader);
2.获取系统类加载器的父类加载器,即扩展类加载器
• classloader = classloader.getParent();
• System.out.println(classloader);
3.获取扩展类加载器的父类加载器,即引导类加载器
• classloader = classloader.getParent();
• System.out.println(classloader);
4.测试当前类由哪个类加载器进行加载
• classloader = Class.forName(“exer2.ClassloaderDemo”).getClassLoader();
• System.out.println(classloader);
5.测试JDK提供的Object类由哪个类加载器加载
• classloader =
• Class.forName(“java.lang.Object”).getClassLoader();
• System.out.println(classloader);
6.关于类加载器的一个主要方法:getResourceAsStream(String str):获取类路径下的指定文件的输入流
• InputStream in = null;
• in = this.getClass().getClassLoader().getResourceAsStream(“exer2\test.properties”);
• System.out.println(in);
代码:
package java1;
import org.junit.Test;
//了解类的加载器
public class ClassLoaderTest {
@Test
public void test1(){
//对于自定义类吗,使用系统类加载器进行加载
ClassLoader classLoador = ClassLoaderTest.class.getClassLoader();
System.out.println(classLoador);
//调用系统类加载的getParent():获取扩展类加载器
ClassLoader classLoador1 = classLoador.getParent();
System.out.println(classLoador1);
//调用扩展类加载的getParent():获取引导类加载器
//引导加载器主要负责加载java的核心类库,无法加载自定义类的
ClassLoader classLoador2 = classLoador1.getParent();
System.out.println(classLoador2);
ClassLoader classLoader3 = String.class.getClassLoader();
System.out.println(classLoader3);
}
}
输出:
sun.misc.Launcher$AppClassLoader@18b4aac2
sun.misc.Launcher$ExtClassLoader@452b3a41
null
null