类加载器

类加载器

什么是类加载器

负责将.class文件(存储的物理文件)加载到内存中

类加载的过程

类加载的时机

用到就加载,不用不加载

类加载的过程

加载

验证

准备

解析

初始化

类加载器的分类

双亲委派模型

加载器之间的层次关系。层次由低到高:自定义类加载器>>系统类加载器>>平台类加载器>>启动类加载器

ClassLoader中有静态方法:getSystemClassLoader()方法,可以获取系统类加载器。然后getParent()会得到更高一层次的加载器。

加载过程:会首先有低层次逐层次调用加载器,最终会调用启动类加载器,当启动类加载器无法完成类的加载时,会有层次由高至低,逐层返回,最终完成类的加载。

类加载器的方法

// 获取一个系统类加载器
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
// 通过系统类加载器加载资源文件,参数为资源文件文件路径
InputStream is = systemClassLoader.getResourceAsStream("prop.properties");
Properties prop = new Properties();
prop.load(is);
System.out.println(prop);
is.close();
//prop.properties文件要放在Src目录下

// 4 通过反射创建对象并调用方法
// 4.1 获取Class对象
Class clazz = Class.forName(props.getProperty("className"));
// 获取构造器对象
Constructor constructor = clazz.getConstructor();
// 创建对象
Object o = constructor.newInstance();
// 获取方法对象
Method method = clazz.getMethod(props.getProperty("methodName"));
// 运行方法
method.invoke(o);
// 释放资源
is.close();