欢迎来到天天文库
浏览记录
ID:42652582
大小:64.05 KB
页数:8页
时间:2019-09-19
《黑马程序员_java反射》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、黑马程序员_JAVA反射反射的基石Class类Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Classo对比提问:众多的人用一个什么类表示?众多的Java类用一个什么类表示?人^PersonJava类aClass对比提问:Person类代表人,它的实例对彖就是张三,李四这样一个个具体的人,Class类代表Java类,它的各个实例对彖又分别对应什么呢?对应各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码,等等。一个类被类加载器加载到内存小,占用一片存储空I'可,这个空间里面的内容
2、就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的,这一个个的空间可分别用一个个的对彖来表示,这些对彖显然具有相同的类型,这个类型是什么呢?如何得到各个字节码对•应的实例对象(Class类型)类名.class,例如,System.class对象.getClass(),例如,newDate().getClass()Class.forName(类名),例如,Class.forName(java.util.Date);可以写变量在运行的时候在明确类名,然后加载。九个预定义Class实例对象:参看Class.isPrimiti
3、ve方法的帮助基本的Java类型(boolean、byte、char、short、ini、long、float和double)和关键字void也表示为Class对彖。如void.class数组类型的Class实例对象class.isArray()总Z,只要是在源程序中出现的类型,都有各口的Class实例对象,例如,int[],void...isPrimitivepublicbooleanisPrimitive()判定指定的Class对彖是否表示一个基本类型。有九种预定义的Class对象,表示八个基本类型和void。这些类对象由Java虚拟机
4、创建,与其表示的基本类型同名,即boolean>byte>char>short>int>long>float和doubleo这些对象仅能通过下列声明为publicstaticfinal的变量访问,也是使此方法返回true的仅有的儿个Class对象。返回:当一11仅当该类表示一个基本类型时,才返回true从以下版本开始:JDK1.1另请参见:Boolean.TYPE,Character.TYPE,Byte.TYPE,Short.TYPE,Integer.TYPE,Long.TYPE,Float.TYPE,Double.TYPE,Void.TY
5、PE女口int.class==Integer.TYPE返I叫ture反射反射就是把Java类中的各种成分映射成相应的java类。例如,一个Java类用一个Class类的对彖來表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车屮的发动机,变速箱等等也是一个个的类。表示java类的Class类显然要捉供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们是Field.Method>Contructor^Package等等。一个
6、类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对彖后,得到这些实例对彖后冇什么用呢?怎么用呢?这正是学习和应用反射的要点。Constructor类代表某个类中的一个构造方法得到某个类所有的构造方法:例子:Constructor[]constructors=Class.forName(java」ang.S(ring).gctConstructors();得到某一个构造方法:例子:Constructorconstructor=Class.forNamc(<4java」ang.Sti*in
7、g'').gctConstructor(Sti'ingBuffci*.class);获得方法时耍用到类型创建实例对象:通常方式:Stringstr=newString(newStringBuffer(abc));反射方式:Stringstr=(String)constructor.newInstance(newStringBuffer(abc));调用获得的方法时要用到上面获得方法时要用到的相同类型的实例对象ncwinstancc(Object...initargs)使用此Constructor对彖表示的构造方法来创建该构造方法的声明类的新
8、实例,并用指定的初始化参数初始化该实例。Class.ncwlns(ancc()方法:例子:Stringobj=(String)Class.forName(java.Iang.St
此文档下载收益归作者所有