欢迎来到优知文库! | 帮助中心 分享价值,成长自我!
优知文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 优知文库 > 资源分类 > PPT文档下载
    分享到微信 分享到微博 分享到QQ空间

    第8章Java的反射机制.ppt

    • 资源ID:618429       资源大小:1.63MB        全文页数:38页
    • 资源格式: PPT        下载积分:7金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录
    二维码
    扫码关注公众号登录
    下载资源需要7金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    第8章Java的反射机制.ppt

    Java的反射机制主要内容1.Class的基本概念以及创建方式的基本概念以及创建方式2.反射的基本概念反射的基本概念3.类的各个组成部分对应的反射类类的各个组成部分对应的反射类 Constructor Field Method4.反射在框架中的应用反射在框架中的应用反射的基础-ClassJava当中的类用来表示具有相同属性和方法的对象的结合,是当中的类用来表示具有相同属性和方法的对象的结合,是抽象的概念。对象是类创建的,同一个类的不同对象具有不抽象的概念。对象是类创建的,同一个类的不同对象具有不同的属性值。同的属性值。Java当中定义的所有类都属于同一类事物,可以用当中定义的所有类都属于同一类事物,可以用Class来表来表示。示。对比理解:对比理解:不同的人可以用不同的人可以用Person类来表示。类来表示。人人-Person Java当中定义的不同类可以用当中定义的不同类可以用Class来表示。来表示。Java当中的类当中的类-ClassClass类的对象-字节码Class类的对象就是不同的类对应的字节码。类的对象就是不同的类对应的字节码。获取获取Class的对象的对象Person p1=new Person();Class class1=new Class()()三种方式:三种方式:(1)对象名对象名.getClass()Person p1=new Person();p1.getClass();(2)类名类名.class Date.class(3)Class.forName()方法方法 (此方式用的较多此方式用的较多)Class.forName(“java.lang.String”);基本数据类型的Class对象Java当中的基本数据类型有:当中的基本数据类型有:boolean int short byte char long float 和和 double 它们也有各自的它们也有各自的Class对象。对象。例如:例如:int.class void 也有自己对应的也有自己对应的Class对象对象 void.class 基本数据类型对应的封装类有属性基本数据类型对应的封装类有属性TYPETYPE,这个属性,这个属性代表了封装类所封装的基本数据类型的代表了封装类所封装的基本数据类型的ClassClass对象。对象。int.class=Integer.TYPEint.class=Integer.TYPE void.class=Void.TYPE void.class=Void.TYPE反射(Reflect)反射就是把反射就是把JavaJava类中的各个组成部分映射成相应的类中的各个组成部分映射成相应的JavaJava类。类。一个类的组成部分包括:属性、方法、构造方法、包等。这些一个类的组成部分包括:属性、方法、构造方法、包等。这些组成部分都会被映射成相应的类。组成部分都会被映射成相应的类。Class类定义了一系列方法来获取类定义了一系列方法来获取java类的属性、方法、构造方类的属性、方法、构造方法、包等信息,这些信息都有相应的类来表示,分别是法、包等信息,这些信息都有相应的类来表示,分别是Field、Method、Constructor、Package等。等。注意:表示注意:表示javajava类组成部分的各种类位于类组成部分的各种类位于java.lang.reflectjava.lang.reflect包包中。中。Constructor类Constructor类用来描述类中所定义的构造方法。类用来描述类中所定义的构造方法。(1)得到类的所有构造方法得到类的所有构造方法 Constructor constructors=Class.forName(“java.lang.String”).getConstructors();(2)得到类中某个具体的构造方法得到类中某个具体的构造方法,在在getConstructor中传入参数类型所对应的中传入参数类型所对应的字节码字节码 Constructor constructor=Class.forName(“java.lang.String”).getConstructor(String.class)使用使用Constructor类的目的是用来创建相应类的对象类的目的是用来创建相应类的对象 正常情况正常情况 String str=new String(“hello”);反射情况反射情况 Constructor con=String.class.getConstructor(String.class)String str=(String)con.newInstance(“hello”);Class.newInstance()通过反射方式创建对象的过程通过反射方式创建对象的过程 Class-Constructor-某个类的对象某个类的对象只有当要只有当要用某个类的无参构造方法创建该类对象时用某个类的无参构造方法创建该类对象时,可以,可以省略创建省略创建ConstructorConstructor类对象的这个过程。类对象的这个过程。Date d=(Date)Class.forName(“java.util.Date”).newInstance();注意:注意:javajava运行环境的缓存中保存了类的无参构造方法所对应运行环境的缓存中保存了类的无参构造方法所对应的的ConstrutorConstrutor对象。对象。见源文件:见源文件:ReflectTest.javaReflectTest.javaField类 Field类用来表示类中的属性类用来表示类中的属性(字段字段)。(1)Class.getFields():(1)Class.getFields():得到得到ClassClass对象的所有字段,返回的是对象的所有字段,返回的是FieldField数组。数组。(2)Class.getField(String name)(2)Class.getField(String name)返回一个返回一个 Field Field 对象,它反映此对象,它反映此 Class Class 对象所表示的类或接口的指定对象所表示的类或接口的指定公有成员公有成员字段。字段。(3)Field(3)Field的对象所代表的某一个类的属性,而的对象所代表的某一个类的属性,而不是那个类的某一个对象的属不是那个类的某一个对象的属性性。要得到某个对象对应的属性值,需要通过。要得到某个对象对应的属性值,需要通过get(Object obj)get(Object obj)方法与某个方法与某个对象具体关联。对象具体关联。(4)(4)对于对于非公有属性非公有属性只能通过只能通过ClassClass的的getDeclaredField(String fieldName)getDeclaredField(String fieldName)方法得到。方法得到。(5)(5)对于对于私有属性私有属性要得到它所关联到的对象的值,需通过要得到它所关联到的对象的值,需通过FieldField的的setAccessible(boolean boolean)setAccessible(boolean boolean)方法设置。方法设置。(6)Field(6)Field类的类的getType()getType()方法用来得到字段所属的类型方法用来得到字段所属的类型 见源文件:见源文件:Field/FieldTest.javaField类 练习:扫描一个对象中所有的字符串类型的练习:扫描一个对象中所有的字符串类型的属性,并为每一个字符串属性的值后面添加属性,并为每一个字符串属性的值后面添加“hello”字符串,然后将这个对象输出。字符串,然后将这个对象输出。见源文件:见源文件:Field/FieldTest1.java 注意:对于字节码的比较一定要用注意:对于字节码的比较一定要用“=”=”,而不是,而不是equals()equals()。掌握上述例子对于理解掌握上述例子对于理解SpringSpring等框架技术具有重要作用。等框架技术具有重要作用。Method类 Method用来表示类中的方法。通过用来表示类中的方法。通过Class对象的如下对象的如下方法得到方法得到Method对象对象Method getMethod(String name,Class.parameterTypes)按名称得到某个特定的按名称得到某个特定的public方法方法(包括从父类或接口继承的方法包括从父类或接口继承的方法)Method getMethods()得到得到public方法方法(包括从父类或接口继承的方法包括从父类或接口继承的方法)Method getDeclaredMethods()得到所有的方法得到所有的方法(不包括继承的方法不包括继承的方法)Method getDeclaredMethod(String name,Class.parameterTypes)按名称得到某个特定的方法按名称得到某个特定的方法(不包括继承的方法不包括继承的方法)Method类Class的的getMethod()方法得到方法得到Method类的对象。类的对象。(1)需要传递方法名所对应的字符串需要传递方法名所对应的字符串(2)需要传递该方法所需要的参数类型的字节码需要传递该方法所需要的参数类型的字节码 invoke(Object obj,Object obj)方法用来调用方法用来调用Method所表示的方法。其中,第一个参数表示此方法所表示的方法。其中,第一个参数表示此方法作用于哪一个对象。作用于哪一个对象。见源文件:见源文件:Method/MethodTest.java 注意:如果调用的是个静态方法,那么注意:如果调用的是个静态方法,那么invoke()invoke()方法中第一个参数用方法中第一个参数用nullnull表示。表示。对接收数组参数的方法进行反射问题:编写一个程序,这个程序能够接收用户提供的类名,然问题:编写一个程序,这个程序能够接收用户提供的类名,然后去执行这个类中的后去执行这个类中的main()方法。方法。见源文件:见源文件:method/MethodTest1.java注意:注意:JDK1.4JDK1.4的编译器会把数组中的每一个元素作为一个参数,的编译器会把数组中的每一个元素作为一个参数,来调用此接收数组参数的方法,这样的话就出现了参数不对来调用此接收数组参数的方法,这样的话就出现了参数不对应的问题。应的问题。mainMethod.invoke(null,new Stringaaa,bbb,ccc);JDK1.5JDK1.5为了兼容为了兼容1.41.4,就必须将整个数组作为一个只有一个元素,就必须将整个数组作为一个只有一个元素的的ObjectObject数组进行传递。数组进行传递。以下两种方式正确:以下两种方式正确:(1)mainMethod.invoke(null,new Objectnew Stringaaa,bbb,ccc);(2)mainMethod.invoke(null,(Object)new Stringaaa,bbb,ccc);数组的反射在在Java中数组属于复合数据类型,中数组属于复合数据类型,具有相同元素类型和维数的具有相同元素类型和维数的数组属于同一个类型数组属于同一个类型,即具有相同的字节码对象。,即具有相同的字节码对象。代表数组的字节码对象调用代表数组的字节码对象调用getSuperClass()得到它的父类得到它的父类Object的字节码对象。的字节码对象。基本数据类型的一维数组可以当做基本数据类型的一维数组可以当做Object类型使用,但类型使用,但不能当不能当做做Object类型使用类型使用;基本数据类型的二维数组可以当做;基本数据类型的二维数组可以当做Object类型使用;类型使用;复合数据类型的一维数组既可以当做复合数据类型的一维数组既可以当做Object类型使用,也可以当做类型使用,也可以当做Object类型使用

    注意事项

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

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 yzwku网站版权所有

    经营许可证编号:宁ICP备2022001189号-2

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知优知文库网,我们立即给予删除!

    收起
    展开