ClassLoader:类装载器
一 类装载器就是寻找类的字节码文件并构造出类在JVM内部表示的对象组件。在Java中,类装载器把一个类装入JVM中,要经过一下步骤:
1、装载:查找和导入Class文件
2、链接:执行校验、准备和解析步骤,其中解析步骤是可以选择的:
a) 校验:检查载入Class文件数据的正确性
b) 准备:给类的静态变量分配存储空间
c) 解析:将符号引用转成直接引用
3、初始化:对类的静态变量、静态代码块执行初始化工作。
二 JVM运行时会产生三个ClassLoader:根装载器、ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器)
根装载器不是ClassLoader的子类,它使用C++编写,
ExtClassLoader和
AppClassLoader都是ClassLoader的子类。
根装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器。
三
委托机制
是指先委托父装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载目标类。--------java.lang.NoSuchMethodError
Java反射机制
一 三个反射类
Constructor:类的构造函数反射类
getConstructor()方法可以获得类的所有构造函数反射对象数组。
newInstance(Object...initargs)创建一个对象类的实例
Method:类方法的反射类
getDeclaredMethods()获取类的所有方法反射类对象数组Method[]
getDeclaredMethod(String name,Class...parameterTypes)获取特定签名的方法----------name为方法名,Class...为方法入参类型列表
invoke(Object obj,Object...args)------obj为操作的目标对象,args为方法入参
Method还有很多用于获取类方法更多信息的方法
1) Class getReturnType():获取方法的返回值类型
2) Class[] getParameterTypes[]:获取方法的入参类型数组
3) Class[] getExceptionTypes[]:获取方法的异常类型数组
4) Annotation[][] getParameterAnnotations():获取方法的注解信息
Field:类的成员变量的反射类
getDeclaredFields()获取类的成员变零反射对象数组
getDeclaredField(String name) 获取某个特定名称的成员变量反射对象
set(Object obj,Object value)-------obj标识操作的目标对象,value为目标对象的成员变量设置值
通过反射访问类中的private、protected方法时,必须调用Method中的setAccessible(boolean access)方法取消Java语言检查,否则抛出异常