欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    Java反射机制-较全面PPT.ppt

    • 资源ID:5436045       资源大小:528.50KB        全文页数:24页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java反射机制-较全面PPT.ppt

    Java反射机制,概述,本课程主要讲述Java反射机制本课程要求大家对Java泛型知识有所了解,因为程序代码中大量使用了泛型相关知识,2010-12-2,第2页,成都天府软件园有限公司TOSC-ITO,目录,Java反射简介4Class Object 8动态实例化 11Method使用 14Field使用 16实用案例 18总结 22,2010-12-2,第3页,成都天府软件园有限公司TOSC-ITO,动态语言,“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C+,Java,C#不是动态语言。尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection。,2010-12-2,第4页,成都天府软件园有限公司TOSC-ITO,什么是反射,反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。,2010-12-2,第5页,成都天府软件园有限公司TOSC-ITO,Java反射的应用,Spring框架:IOC(控制反转)Hibernate框架:关联映射等白盒测试,2010-12-2,第6页,成都天府软件园有限公司TOSC-ITO,Java 反射相关的API,java.lang包下Class:表示一个正在运行的 Java 应用程序中的类和接口,是Reflection的起源包下Field 类:代表类的成员变量(也称类的属性)Method类:代表类的方法Constructor 类:代表类的构造方法Array类:提供了动态创建数组,以及访问数组的元素的静态方法,2010-12-2,第7页,成都天府软件园有限公司TOSC-ITO,Class,类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象Class是Reflection起源。要想操纵类中的属性和方法,都必须从获取Class object开始,2010-12-2,第8页,成都天府软件园有限公司TOSC-ITO,第一个实例就用大家非常熟悉的ArrayList类,我们尝试来获取ArrayList申明的方法。public static void main(String args)ArrayList aList=new ArrayList();Class alClass=aList.getClass();System.out.println(+alClass);System.out.println(+alClass.getName();Method alMethod=alClass.getDeclaredMethods();for(Method method:alMethod)System.out.println(+method);System.out.println(+method.getName();,案例一,2010-12-2,第9页,成都天府软件园有限公司TOSC-ITO,获取Class Object,2010-12-2,第10页,成都天府软件园有限公司TOSC-ITO,根据具体情形和个人爱好,可以选择下面任何一种方式获得Class对象,通过反射实例化对象,平常情况我们通过new Object来生成一个类的实例,但有时候我们没法直接new,只能通过反射动态生成。实例化无参构造函数的对象,两种方式:Class.newInstance();Class.getConstructor(new Class).newInstance(new Object)实例化带参构造函数的对象:clazz.getConstructor(Class.parameterTypes).newInstance(Object.initargs),2010-12-2,第11页,成都天府软件园有限公司TOSC-ITO,案例准备,首先我们新建一个JavaBeanUser,User继承自另一个BeanBaseUser。注意:这两个Bean的属性和方法的作用域!,2010-12-2,第12页,成都天府软件园有限公司TOSC-ITO,案例二:动态实例化,2010-12-2,第13页,成都天府软件园有限公司TOSC-ITO,通过反射调用Method(方法),获得当前类以及超类的public Method:Method arrMethods=classType.getMethods();获得当前类申明的所有Method:Method arrMethods=classType.getDeclaredMethods();获得当前类以及超类指定的public Method:Method method=classType.getMethod(Stringname,Class.parameterTypes);获得当前类申明的指定的Method:Method method=classType.getDeclaredMethod(String name,Class.parameterTypes)通过反射动态运行指定Method:Object obj=method.invoke(Objectobj,Object.args),2010-12-2,第14页,成都天府软件园有限公司TOSC-ITO,案例三:动态操纵Method,2010-12-2,第15页,成都天府软件园有限公司TOSC-ITO,通过反射调用Field(变量),获得当前类以及超类的public Field:Field arrFields=classType.getFields();获得当前类申明的所有Field:Field arrFields=classType.getDeclaredFields();获得当前类以及超类指定的public Field:Field field=classType.getField(Stringname);获得当前类申明的指定的Field:Field field=classType.getDeclaredField(String name);通过反射动态设定Field的值:fieldType.set(Object obj,Objectvalue);通过反射动态获取Field的值:Object obj=fieldType.get(Objectobj);,2010-12-2,第16页,成都天府软件园有限公司TOSC-ITO,案例四:动态操纵Field,2010-12-2,第17页,成都天府软件园有限公司TOSC-ITO,案例五:趁热打铁(提出问题),在Hibernate中,已知有一个user实体(属性id,name,phone)需要被update,我们通常有三种方式:首先User loadUser=session.load(user.getId);此时loadUser是持久化的,然后使用loadUser.setX(user.getX)方法把需要更新的字段set一下写hql语句session.update(user);问题来了:假如user实体中只有id和name有值,如果我们用以上方式更新的话,phone因为是null,数据库的phone本来是有值的,但经过更新后,也会被更新成null。那么有什么方法能判断user实体中哪些对象为null呢?然后我们就可以不更新那些字段。也许反射可以帮忙解决。,2010-12-2,第18页,成都天府软件园有限公司TOSC-ITO,案例五:趁热打铁(分析问题),已知有一个user实体(属性id,name,phone)需要被update我们的解决方式其实很简单:首先User loadUser=session.load(user.getId);此时loadUser是持久化的然后使用loadUser.setXXX(user.getXXX)方法把需要更新的字段set一下至于怎么判断哪些属性需要更新,我们可以通过反射先获得所有的getXXX方法,然后逐个invoke获得它们的值,判断一下如果值需要更新才执行loadUser.setXX(user.getXXX),2010-12-2,第19页,成都天府软件园有限公司TOSC-ITO,案例五:趁热打铁(解决问题),看源码:,2010-12-2,第20页,成都天府软件园有限公司TOSC-ITO,Spring框架的IOC的简化实现,2010-12-2,第21页,成都天府软件园有限公司TOSC-ITO,Java反射总结,只要用到反射,先获得Class Object没有方法能获得当前类的超类的private方法和属性,你必须通过getSuperclass()找到超类以后再去尝试获得通常情况即使是当前类,private属性或方法也是不能访问的,你需要 设置压制权限setAccessible(true)来取得private的访问权。但说实话,这已经破坏了面向对象的规则,所以除非万不得已,请尽量少用。Array对象并未讲解,请下来自己学习。,2010-12-2,第22页,成都天府软件园有限公司TOSC-ITO,Homework,通过反射找出 这个类的构造函数、属性和方法。作业提交期限:2010年12月31日,2010-12-2,成都天府软件园有限公司TOSC-ITO,第23页,The end,

    注意事项

    本文(Java反射机制-较全面PPT.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开