欢迎来到天天文库
浏览记录
ID:53008796
大小:451.17 KB
页数:9页
时间:2020-04-11
《JAVA反射机制(个人笔记).pdf》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射(Reflection)机制。在运行时判断任意一个对象所属的类。在运行时构造任意一个类的对象。在运行时判断任意一个类所具有的成员变量和方法。在运行时调用任意一个对象的方法Reflection是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过ReflectionAPIs取得任何一个已知名称的class的内部信息,包括其modifier
2、s(诸如public,static等等)、superclass(例如Object)、实现之interfaces(例如Serializable),也包括fields和methods的所有信息,并可于运行时改变fields内容或调用methods一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中Class
3、类:代表一个类。Field类:代表类的成员变量(成员变量也称为类的属性)。Method类:代表类的方法。Constructor类:代表类的构造方法。Array类:提供了动态创建数组,以及访问数组的元素的静态方法任何一个对象都有一个和它相对应的Class对象描述该对象的属性,方法等信息。通过getClass()获取。Field[]fields=classtype.getDeclaredFields();Method[]methods=classtype.getDeclaredMethods();publicstaticvoidmain(String[]a
4、rgs)throwsClassNotFoundException{//Classclassobj=ainstance.getClass();这是另一种获取ainstance对象对应的Class类型对象。Aainstance=newA();Class>classtype=Class.forName("whl.reflection.A");Field[]fields=classtype.getDeclaredFields();Method[]methods=classtype.getDeclaredMethods();System.out.println("l
5、ength:"+fields.length);for(inti=0;i6、Class()被JVM调用,JVM便自动产生一个Classobject。因为Class并没有publicconstructorClass是Reflection起源。针对任何您想探勘的class,唯有先为它产生一个Classobject,接下来才能经由后者唤起为数十多个的ReflectionAPIs“Class”object的取得途径Java允许我们从多种途径为一个class生成对应的Classobject第26生成对象实例:1:不带参数(通过Class对象newInstance()方法生产对象实例)运行时生成instances动态生成“Classobject所7、对应之class”的对象实体;无自变量。2:带参数(通过Constructor对象调用newInstance(arg)方法生成对象实例)第29向上转型和多态:由于最近很长一段时间忙于他事,对java的有些机制的概念的理解模糊了些,甚至有些遗忘了,现在终于可以转入正轨,今天在读一段代码时,看到了如下的情况(由于公司保密要求,故不泄露具体函数名称和实现细目,只暴露我遇见的问题):InterfaceA{abstractvoidf();}classBimplementsA{voidf(){//body;..............//bodyend}}publicca8、lssc{publicstaticvo
6、Class()被JVM调用,JVM便自动产生一个Classobject。因为Class并没有publicconstructorClass是Reflection起源。针对任何您想探勘的class,唯有先为它产生一个Classobject,接下来才能经由后者唤起为数十多个的ReflectionAPIs“Class”object的取得途径Java允许我们从多种途径为一个class生成对应的Classobject第26生成对象实例:1:不带参数(通过Class对象newInstance()方法生产对象实例)运行时生成instances动态生成“Classobject所
7、对应之class”的对象实体;无自变量。2:带参数(通过Constructor对象调用newInstance(arg)方法生成对象实例)第29向上转型和多态:由于最近很长一段时间忙于他事,对java的有些机制的概念的理解模糊了些,甚至有些遗忘了,现在终于可以转入正轨,今天在读一段代码时,看到了如下的情况(由于公司保密要求,故不泄露具体函数名称和实现细目,只暴露我遇见的问题):InterfaceA{abstractvoidf();}classBimplementsA{voidf(){//body;..............//bodyend}}publicca
8、lssc{publicstaticvo
此文档下载收益归作者所有