12. 尚硅谷_佟刚_Java基础_反射.pdf
文本预览下载声明
-2-
?理解 Class 类
?理解 Java 的类加载机制
?学会使用 ClassLoader 进行类加载
?理解反射的机制
?掌握 Constructor、Method、Field 类的用法
?理解并掌握动态代理
目标
Class 类
? Class类
– 对象照镜子后可以得到的信息:某个类的数据成员名、方法和构造器、
某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个
不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关
信息。
– Class 对象只能由系统建立对象
– 一个类在 JVM 中只会有一个Class实例
– 每个类的实例都会记得自己是由哪个 Class 实例所生成
获取 Class 对象的方式
Class类的常用方法
方法名 功能说明
static Class forName(String name) 返回指定类名 name 的 Class 对象
Object newInstance() 调用缺省构造函数,返回该Class对象的一个实例
Object newInstance(Object []args) 调用当前格式构造函数,返回该Class对象的一个实例
getName() 返回此Class对象所表示的实体(类、接口、数组类、基
本类型或void)名称
Class getSuperClass() 返回当前Class对象的父类的Class对象
Class [] getInterfaces() 获取当前Class对象的接口
ClassLoader getClassLoader() 返回该类的类加载器
Class getSuperclass() 返回表示此Class所表示的实体的超类的Class
? ClassLoader
类装载器是用来把类(class)装载进 JVM 的。JVM 规范定义了两种类型
的类装载器:启动类装载器(bootstrap)和用户自定义装载器(user-
defined class loader)。 JVM在运行时会产生3个类加载器组成的初始化
加载器层次结构 ,如下图所示:
Bootstap Classloader
System Classloader
Extension Classloader
自
底
向
上
检
查
类
是
否
已
装
载
自
顶
向
下
尝
试
加
载
类
引导类加载器:用C++编写的,是JVM自
带的类装载器,负责Java平台核心库,用
来装载核心类库。该加载器无法直接获取
扩展类加载器:负责jdk_home/lib/ext目录下
的jar包或 –D java.ext.dirs 指定目录下的jar包
装入工作库
系统类加载器:负责java –classpath 或 –D
java.class.path所指的目录下的类与jar包装入
工作
演示类加载机制的层次关系 :
public class ClassLoaderDemo {
public static void main(String[] args) {
ClassLoader classloader;
//获取系统缺省的ClassLoader
classloader = ClassLoader.getSystemClassLoader();
System.out.println(classloader);
while (classloader != null) {
//取得父的ClassLoader
classloader = classloader.getParent();
System.out.println(classloader);
}
try {
Class cl = Class.forName(java.lang.Object);
classloader = cl.getClassLoader();
System.out.println(java.lang.Objects loader is + classloader);
cl = Class.forName(com.atguigu.javase.reflection.ClassLoaderDemo);
classloader = cl.getClassLoader();
System.out.println(ClassLoaderDemos loader is + classloader);
} catch (Exception e) {
System.out.println(Check name of the class);
}
}
}
执行结果如下:
//表示系统类装载器实例化自类sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$App
显示全部