欢迎来到天天文库
浏览记录
ID:42001687
大小:145.01 KB
页数:8页
时间:2019-09-06
《反射_计算机软件及应用_IT计算机_专业资料》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、反射(执行速度慢,性能差,主耍做工具和框架)一:引入1)对象分为编译类型和运行类型:Objectobj=newDate();编译类型:Object运行类型:就是指Object的真实类型Date编译类型要是调川的运行类型中的方法则会出现编译错误,可以解决的一个手段就是讲obj强制转化为Date类型,但是这样做的前提是要知道obj的运行类型。2)Strings]="A";Strings2=〃B〃;Strings3二〃C〃;D・l・4StrihcArrtyUstftD・l・S(rih(ArrtyUst对象就
2、是数据,类就是描述数据的数据,万物皆对象,所有类也是个对象,这样类也可以有东西来描述。元数据(metadate),就是描述数据的描述数据。反射:得到元数据的行为,也就是根据一个类可以得到这个类中的所有的信息。Class是对一切类功能行为和状态的抽象,所以Class中就应该有类具备的成员getPackage();表示得到类的包名getSuperClass();表示得到类的父类getMethods();表示得到类中的方法getField();表示得到类中的方法所以通过反射我们可以得到一个类的包名,类名,方
3、法,字段,构造器……o但是询捉是要知道是哪个类。Class可以用于描述一切的类或者接口,Class实例就是JVM中的一份字节码,为了解决Class实例表示的是谁的字节码,所以给出了泛型。泛型值的当前表示的字节码类型。二:如何得到Class的实例<1>:类的Class实例1.类名.class(就是一份字节码文件);2.Class.forName(StringclassName);根据一个类的全限定名得到Class实例,全限定名就是包名加上类名。该方法是以后用的最多的方法。3.每一个对象都冇一个getCl
4、ass(),的方法,返回的是对象Class其真实类型也就是运行类型。得到Class实例。publicclassReflectDemol{publicstaticvoidmain(String[]args){〃第一种方式Classclzll=User.class;System.oi/右・println(clzll);〃第二种方式try{Class>clzl2=Class.forName(ureflect.User11);System.out.println(clzl2);}catch(C
5、lassNotFoundExceptione){e.printStackTrace();}〃第三种方式Useruser=newUser();Classclzl3=user.getClass();System.out.println(clzl3);}}三个方式产生的Class实例是相同的,一个类在JVM中有且仅有一份字节码,会用新的字节码替换老的字节码。<2>:基本数据类型Class实例基木数据类型是没有权限名和getClass方法的,要想获得基木数据类型的Class实例方法:Class实例=数据类型.
6、class;Classclzll=int.class;所有的数据类型都有class属性,表示都是Class对象。基木数据类型的字节码和其对应的包装类的字节码并不是同一份字节码。在八大基本数据类型中都冇一个常呈TYPE,TYPE表示该包装类对应的基木类型的Class实例。即int.class==lnteger.TYPE//true;<3>:数组Class实例所有具有相同类型和维数的数纽共亨同一•份数据对象。三:API<1>获取某一个类屮的所有的构造器1.明确操作是哪一份字节码对象2.获取构造器Class
7、类获取构造器方法publicConstructor>[]getConstructors():获取公共的构造器publicpublicConstructor>[]getDeclaredConstructors();获収所有的构造器与权限无关。publicConstnjctor〈T>getConstructor(Class〈?>.••parameterTypes)publicConstruetor〈T>getDeclaredConstructor(C1qss〈?>・・•parameterTypes
8、)publicclassReflectDemol{publicstaticvoidmain(String[]args){try{//创建Class对彖Class>clzl2=Class.forName(11reflect.User11);//获取所有的public类型构造器Constructor]]cons=clzl2.getConstructors();for(Constructorconstructor:cons){System.out.prin
此文档下载收益归作者所有