最近准备写关于AOP 的实现原理,但是基础过于薄弱,故而从Java反射开始学习,在未来几张,会写关于静态代理,动态代理,以及AOP的实现原理
现在贴上反射基础
1.Class类
1)在面向对象的世界里,万事万物皆对象。(java语言中,静态的成员、普通数据类型除外)类是不是对象呢?类是(哪个类的对象呢?)谁的对象呢? 类是对象,类是java.lang.Class类的实例对象
2)这个对象到底如何表示,Fool fo= new Fool();Fool是Class类对象的实例
3 )Class.forName("java.util.Integer"),或者是class.class(.class是类默认的静态方法),或者是class.getClass()
(c1 = A.class )=== (c2 = A.getClass() )=== (c3 = Class.forName("com.A"));(类类型只能有一个)
通过类类型创建对象
从 A a = (A)c1.getInstance();//这里是无参构造方法
4)基本的数据类型
void关键字 都存在类类型
5)Class类的基本API操作
2.方法的反射
1)如何获取某个方法
方法的名称和方法的参数列表才能唯一决定某个方法
2)方法反射的操作
method.invoke(对象,参数列表)
public static void main(String[] args) {
A a1 = new A();
//通过反射拿到A的对象
Class c = null;
c = A.class;
int a = 10,b =10;
try {
Method method = c.getDeclaredMethod("fun", new Class[]{int.class ,int.class });
method.invoke(a1, 10,10);
Method methodString = c.getDeclaredMethod("fun", new Class[]{int.class ,int.class });
methodString.invoke(a1, "xiao","yao");
}
catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}