




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
反射,讲师:佟刚 新浪微博:尚硅谷-佟刚,-2-,理解 Class 类 理解 Java 的类加载机制 学会使用 ClassLoader 进行类加载 理解反射的机制 掌握 Constructor、Method、Field 类的用法 理解并掌握动态代理,目标,Class 类,Class类 对象照镜子后可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。一个 Class 对象包含了特定某个类的有关信息。 Class 对象只能由系统建立对象 一个类在 JVM 中只会有一个Class实例 每个类的实例都会记得自己是由哪个 Class 实例所生成,获取 Class 对象的方式,Class类的常用方法,ClassLoader 类装载器是用来把类(class)装载进 JVM 的。JVM 规范定义了两种类型的类装载器:启动类装载器(bootstrap)和用户自定义装载器(user-defined class loader)。 JVM在运行时会产生3个类加载器组成的初始化加载器层次结构 ,如下图所示:,引导类加载器:用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$AppClassLoader19821f /表示系统类装载器的parent实例化自类sun.misc.Launcher$ExtClassLoader sun.misc.Launcher$ExtClassLoaderaddbf1 /表示系统类装载器parent的parent为bootstrap,无法直接获取 null /表示类Object是由bootstrap装载的 java.lang.Objects loader is null /表示用户类是由系统类装载器装载的 ClassLoaderDemos loader is sun.misc.Launcher$AppClassLoader19821f,反射,反射概述 Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的內部信息,并能直接操作任意对象的内部属性及方法。 Java反射机制主要提供了以下功能: 在运行时构造任意一个类的对象 在运行时获取任意一个类所具有的成员变量和方法 在运行时调用任意一个对象的方法(属性) 生成动态代理,在运行时构造一个类的对象,调用 Class 对象的 newInstance() 方法 调用 Constructor 对象的 newInstance(Object. initargs),Constructor 对象,代表构造器对象 获取 Constructor: 相关方法: newInstance(Object. initargs) setAccessible(boolean flag),Method(Field) 对象,代表方法 Class 对象获取 Method 的方法: getDeclaredMethod(String name, Class. parameterTypes) getDeclaredMethods() getMethod(String name, Class. parameterTypes) getMethods() Method 对象的方法: invoke(Object obj, Object. args),Annotation 相关,以 Method 为例: 获取 Annotation 实例: getAnnotation(Class annotationClass) getDeclaredAnnotations() getParameterAnnotations(),泛型相关,获取父类泛型类型:Type getGenericSuperclass() 泛型类型:ParameterizedType 获取实际的泛型类型参数数组:getActualTypeArguments(),创建动态代理,Proxy 提供用于创建动态代理类和代理对象的静态方法, 它也是所有动态代理类的父类. Proxy 提供了两个方法来创建动态代理类和动态代理实例,使用动态代理实现 AOP,AOP(Aspect Orient Program, 面向切面编程),动态代理增加的普通方法,回调目标对象的方法,动态代理增加的普通方法,AOP 代理的方法,非模块化的横切关注点所带来的问题,横切关注点: 跨越应用程序多个模块的功能.,额外需求1:在程序执行期间追踪正在发生的活动 额外需求2:希望计算器只能处理正数的运算,代码实现片段,问题,越来越多的非业务需求(日志和验证)加入后, 原有的计算器方法急剧膨胀. 属于系统范围内的需求通常需要跨越多个模块(横切关注点), 这些类似的需求包括日志, 验证, 事务等.,算术计算器,单元计算器,日志,验证,非模块化的横切关注点将会导致的问题,代码混乱: 每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点. 代码分散: 以日志需求为例, 只是为了满足这个单一需求, 就不得不在多个模块里多次重复相同的日志代码. 如果日志需求发生变化, 必
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 委托项目融资服务合同5篇
- 2025贵州铜仁市石阡县参加第十三届贵州人才博览会引进事业单位高层次及急需紧缺人才26人考前自测高频考点模拟试题及答案详解(必刷)
- 生物膜抗性评价-洞察与解读
- 2025年咸阳亨通电力(集团)有限公司招聘(4人)考前自测高频考点模拟试题及答案详解(夺冠系列)
- 2025年山东师范大学第二附属中学第二批公开招聘人员(11名)模拟试卷及1套参考答案详解
- 2025湖南凤凰县直机关事业单位选调40人考前自测高频考点模拟试题及1套完整答案详解
- 2025广东深圳大学文化产业研究院宗祖盼副教授博士后招聘1人模拟试卷及答案详解(易错题)
- 2025贵州习水县官店镇卫生院招聘见习人员考前自测高频考点模拟试题附答案详解(完整版)
- 班组安全风险意识培训课件
- 2025年4月广东深圳市光明区群团工作部招聘社会化工会工作者3人考前自测高频考点模拟试题附答案详解(典型题)
- 督导门店工作总结
- 水泥行业年度汇报
- 2026中国电力工程顾问集团华东电力设计院有限公司校园招聘考试参考试题及答案解析
- 2025邮储银行校招笔试真题及答案
- 2025年重获驾驶权限科目一机动车理论考试题库
- 山东省菏泽市牡丹区2024-2025学年七年级上学期第一次月考数学试卷(含答案)
- 《项目基金管理办法》
- 2025年西藏司法考试真题及答案
- 民族团结一家亲知识竞赛试题及答案
- 运动跑步专业知识培训课件
- 禁塑知识培训课件
评论
0/150
提交评论