第十二章反射与反思课程纲要
1、什么是反射
2、类类
3、按类获取类信息
4、从Class类中调用属性或方法
5、动态代理
六、JavaBean概念
7、反思的基本概念
8、Introspector相关API
9、单模优化
1、什么是反射反射: Reflection
2、类Class是所有反射的根源。
Class类表示什么?
很多人——可以定义波斯顿类(有年龄、性别、名字等) )。
许多车——可以定义Car类(有发动机、颜色、车轮等) )。
许多类——Class类(类名、生成方法、属性、方法) )。
可以通过以下三种方法获得Class类的对象:
第一种格式是Object类的getClass ()方法
第二种形式:类. class
第三种形式:基于Class类的forName方法
使用Class类进行对象的实例化操作
调用无参数结构实例化
publictnewinstance (throwsinstantiationexception,IllegalAccessException )
调用带参数的结构进行实例化
公共构造器? [] getConstructors () throws SecurityException
package com.vince; import org.junit.Test; import Java.lang.reflect.constructor; import java.lang.reflect.Field; import Java.lang.reflect.invocationtargetexception; import Java.lang.reflect.modifier; public Class ReflectionDemo { /*是class对象的三种格式*/@Test public void test1 ()//对象的getClass )方法dogdog=newdog //类. class Class dogClass=Dog.class; Class.forName方法try { class a classs=class.forname (' com.Vince.dog ' ); }catch(classnotfoundexceptione ) { e.printStackTrace ); }/*通过反射实例化对象*/public void test2({ classdogclass=dog.class; 用try//class对象实例化对象,并使用缺省的无参数构造方法Dog dog=(Dog ) dogClass.newInstance (; }扫描(instantiationexceptione ) { e.printStackTrace ); }catch(illegalaccessexceptione ) { e.printStackTrace ); } } @Test public void test3() { Class dogClass=Dog.class; constructor [ ] constructors=dog class.get constructors (; for(intI=0; i constructors.length; I ) system.out.println (constructors [ I ].getname (); system.out.println (constructors [ I ].getparameter count () ); } try { //指定的生成方法constructor constructor=dog class.get constructor (string.class,int.class ); //调用带参数的构造函数来调用对象Dog dog=(Dog ) constructor.newInstance ('娇惯歌曲',7 ); }扫描(instantiationexceptione ) { e.printStackTrace ); }catch(illegalaccessexceptione ) { e.printStackTrace ); } catch (不相关任务跟踪) { e.printStackTrace ); }catch(nosuchmethodexceptione ) { e.printStackTrace ); } } @Test public void test4() { Class dogClass=Dog.class; //属性field field [ ] fields=dog class.get fields (; //专用属性不可打印//system.out.println (fields.length ); //因为取得了所以有属性。 私有属性field [ ] declared fields=dog class.getdeclaredfields (; //system.out.println (declared fields.length ); for(intI=0; i declaredFields.length; I ) int modifiers=declared fields [ I ].get modifiers (; system.out.println (modifier.tostring (modifiers (' declared fields [ I ].getname ) ); } }}class Dog{ private String name; 私有输入; 公共字符串属性; 公共字符串获取名称() { return name; }publicvoidsetname(stringname ) { this.name=name; } public int getAge () { return age; }publicvoidsetage(intage ) { this.age=age; }publicdog(stringname,int age ) { this.name=name; this.age=age; } @Override public String toString () return'dog ) ' ' name=''name'",age=' age '} ' ); }} test3:
com.vince.Dog
2
test4:
private name
权限页面
公共主题