文档详情

12. 尚硅谷_佟刚_Java基础_反射.pdf

发布:2017-04-11约3.94千字共26页下载文档
文本预览下载声明
-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
显示全部
相似文档