类加载器
Java的类主要分为3种
- Java核心类库:String, Object ...
- JVM软件平台开发商
- 自己声明定义的类:User, Child ...
相应的类加载器也有3种 -- Java17
- BootClassLoader 启动类加载器 -- 加载Java核心类库 -- 加载类时,采用操作系统平台语言实现
- PlatformClassLoader 平台加载器
- AppClassLoader 应用类加载器
相应的类加载器也有3种 -- Java8
- BootstrapClassLoader 是顶级加载器,默认加载的是%JAVA_HOME%中lib下的jar包和class类文件,他也是ExtClassLoader的父类,但是不是继承(extends)关系,是ExtClassLoder中有一个parent变量是BootstrapClassLoader
- ExtClassLoader 扩展类加载器,负责加载%JAVA_HOME%中lib/ext文件下的jar包和class类文件,ExtClassLoader加载器是AppClassLoader的父类,当然也不是继承(extends)关系,也是类中有parent变量
- AppClassLoader (应用程序加载器/系统类加载器)是自定义加载器的父类,负责加载classPath下的类文件,平时引用的jar包以及我们自己写的类都是这个加载器进行加载的,同时AppClassLoader还是线程上下文加载器,如果想实现一个自定义加载器的话就继承(extends)ClassLoader来实现
Java8
public class ClassLoader {
public static void main(String[] args) {
//TODO 类名.class 获取类信息
Class<Student> studentClass = Student.class;
//TODO .getClassLoader() 获取类加载器
java.lang.ClassLoader classLoader = studentClass.getClassLoader();
System.out.println(classLoader); //sun.misc.Launcher$AppClassLoader@18b4aac2
//String的加载器 -- 启动类加载器,加载类时,采用操作系统平台语言实现
Class<String> stringClass = String.class;
java.lang.ClassLoader classLoader1 = stringClass.getClassLoader();
System.out.println(classLoader1); //null
// 加载Java核心类库 > 平台类库 > 用户定义的类
// -- 下级可以获取上级,因为上级必须在下级前加载
System.out.println(classLoader.getParent()); //sun.misc.Launcher$ExtClassLoader@1b6d3586
System.out.println(classLoader.getParent().getParent()); //null
}
}
class Student{
}
标签:类库,反射,--,AppClassLoader,println,class,加载
From: https://www.cnblogs.com/Ashen-/p/17027598.html