1.反射可以做什么
2.反射相关的API
3.获取Class运行时类的实例的三种方法:
1)通过运行时类本身的.class属性*****
Class clazz= Person.class;
2)通过运行时类的对象获取
Person p=new Person;
Class clazz=p.getClass();
3)通过Class的静态方法获取,//通过此方式,体现反射的动态性。来什么字符串类,就造什么类******
String className="com.cmge.org.Person";
Class clazz=Class.forName(className);
4)通过类加载器
String className="com.cmge.org.Person";
ClassLoader loader=this.getClass.getClassLoader();
Class clazz=loader.loadClass(className);
System.out.printIn(clazz.getName());
4.创建运行时类的实例,并获取类的相关结构
方法一://创建运行时类的实例,使用newInstance(),实际上调用了类的无参构造器。因此要想运行时类的实例创建成功,必须要有无参构造器,并且无参构造器的访问权限是公开的
String className="com.cmge.org.Person";
Class clazz=Class.forName(className);
Object object=clazz.newInstance();
Person p=(Person)object;
5、通过反射获取类的完整结构
1)获取运行时类的属性(getFields()获取公开属性、getDeclaredFileds()获取运行时类申明的全部属性),
获取属性的修饰符、变量类型、变量名。
2)获取运行时类的方法
获取运行时类的方法(getmethods()获取公开的方法、getDeclaredMethods()获取全部方法)
Class clazz=Person.class;
Method[] m1=clazz.getMethods();
Method[] m2=clazz.getDeclaredMethods();
获取方法的注释、方法修饰符、方法返回值类型、方法变量名、方法参数列表、方法异常
for(Method m in m2){
Annotation[] anns=m.getAnnotations();//获取方法注释
String str=Modifier.toString(m.getModifiers());//获取方法修饰符
Class typeclass=m.getReturnType();//获取返回值类型
Class[] params=m.getParameterTypes();//获取参数列表
Class[] exps=m.getExceptionTypes();
}
3)获取运行时类的构造器及其他
Class clazz=Person.class;
Constructor c=clazz.getDeclaredConstructor();//获取构造器
//获取运行时类的父类、
//获取父类的泛型、
Class[] interfaces=clazz.getInterfaces();//获取实现的接口、
Packge p=clazz.getPackge();//获取所在的包
Annotation[] anns=clazz.getAnnotations();//获取类的注解
6、调用运行时类的指定的属性,指定的方法
1)调用指定的属性
Class clazz=Person.class;
Field name=clazz.getField("name");
Person p=(Person) clazz.newInstance();
name.set(p,"Jerry");//设置指定的属性值
2)调用指定的方法
Class clazz=Person.class;
Method m=clazz.getMethod("show");
Person p=(Person)clazz.newInstance();
Object obj=m.invoke(p);//调用指定的方法
Method m2=clazz.getMethod("info");//其中info是静态的方法
m2.invoke(Person.class);//调用静态的方法
Method m3=clazz.getMethod("display",String.class,Integer.class);//调用有两个参数的方法
Object obj2=m3.invoke(p,"USA",10);
3)调用指定的构造器
7、动态代理与AOP
******重要,需要重复学习
视频地址:http://edu.csdn.net/course/detail/809/11015?auto_start=1