




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023-2024学年四年级语文上册-第八单元“历史传说”主题阅读练习(含答案)
- 浙教版科学九年级下册《实现可持续发展》听评课记录
- 统编版八年级语文上册《25 诗词五首》听评课记录
- 部编版语文八年级上册《唐诗五首》听评课记录听评课记录同步练习
- 高中数学人教B版必修五3.3《一元二次不等式及其解法》听评课记录1
- 部编版九年级初三语文上册《敬业与乐业》听评课记录
- 川教版信息技术八下第4课《信息的搜索》听评课记录7
- 苏教版三年级数学下册第一单元第1课《整十数的乘法口算和估算》听评课记录
- 新闻两则-学习目标听评课记录
- 深圳七年级语文部编版初一上册《春》第1课时听评课记录
- 《物联网技术与应用》课件
- 自来水厂改建工程施工组织设计方案
- 2025年中国移动辽宁公司招聘笔试参考题库含答案解析
- 2025年夫妻离婚协议书模板
- 2023届高考英语人教版一轮复习:必修第一册至选修第四册单词表讲义
- 网络安全漏洞修复
- 旅游创意策划方案
- 《肿瘤筛查技术》课件
- 高温熔融金属企业安全知识培训
- 实验室生物安全手册
- 2024年重庆市长寿区春招数学试卷(含答案)
评论
0/150
提交评论