1.反射
反射在我们日常的开发中经常使用,尤其在开发框架中更是有着不可替代的作用,我们在框架基础上运行我们的程序,必须通过配置文件把我们的程序加载到正在运行的框架中。
1.1反射的概念
反射就是把java类的每个信息变成j一个java类,所以存在java文件有字节码类(Class),构造方法有构造方法类,java方法有一个方法类(Method),java属性则有属性类(Field)等等
1.2字节码(Class)
怎么得到一个java文件的字节码对象,一般来说有如下三种方法:
- 直接用类名来得到(类名.class)
- 用该类的对象调用Object的getClass()方法(对象.getClass())
- 直接用Class里面的静态方法forName("")(Class.forName("")
1.2.1通过字节码对象得到这个字节码对象的对象
我们一般生成一个对象都是通过new出来的,所以我们需要先得到这个字节码对象的构造方法对象,而构造方法分为有参和无参构造方法,然后通过构造方法对象得到这个类的对象
这里可能会有疑问,为什么字节码对象可以直接生成对象,由于开发者为了我们编写程序的简便性,他直接把无参构造方法生成对象的方法封装在Class类里面
1.3属性(Field)
属性对象我们可以用字节码对象来获得,我们可以操作任何访问权限的属性,我们还可以通过创建对象来操作已经获得的属性对象
1.4方法(Method)
这个类我们需要特别注意的一个方法是invoke(Object obj, Object... args),这个就是方法对象执行的方法,第一个参数就是执行这个方法的对象,后面的参数则是方法的参数
//静态方法的得到,staticShow是静态方法的名称
Method method = clazz1.getMethod("staticShow");
Method method = clazz1.getMethod("staticShow");
//该方法的第一个参数是固定的,则这个null必须要
method.invoke(null);
method.invoke(null);