反射的原理
就是指程序在运行时能够动态的获取一个类的类型信息的一种操作,现在的多数的框架都有反射的存在,所以现在框架内都不允许覆盖掉默认的无参构造方法,因为框架的一些自动化机制都是靠反射机制,而反射需要用无参构造器创建实例
简单来说,以前都是拿着对象去给里面的属性赋值,反射则是拿着属性去找对象里对应的那个属性来完成赋值,
一、获取类基本信息的三种方法
java中获取一个类的基本信息有三种方法
1、类名.Class
第一种也是最简单的一种
aaa.Class
bbb.Class
int.Class
2、getClass()方法
这是一个所有类型的实例都有的方法,并且不允许被子类重写
Integer in= new Integer(12);
in.getClass();//这样就获得了in的这个实例的地址
3、forName()方法
forName方法是Class方法里最常用的一个方法,它可以传进一个全类名,并返回一个地址,可以根据这个地址创建一个对象,利用这个地址创建的对象并不是同一个对象,
//1、根据Student路径获取Student的反射类对象
Class<?> aClass = Class.forName("text.text02.Student");
//根据一个地址创建一个对象
Object o = aClass.newInstance();
Object o1 = aClass.newInstance();
System.out.println(o==o1);//false 证明根据地址创建的对象不是一个对象
二、根据反射类获取类对象
三、获取类中属性对象
四、获取类中方法对象
getDeclaredMethods方法获取类中所有的方法,并返回一个数组
public class textGet {
public static void main(String[] args) {
//反射第一步,必须先得到这个类的Class对象
Class c=cat.class;
//获取这个类的全部成员方法
for (Method dec: c.getDeclaredMethods()) {
//通过getDeclaredMethods方法获取全部方法,并且使用for循环遍历出来
System.out.println(dec.getName()
+"===构造方法---》===="+dec.getParameterCount()
+"-------"+dec.getReturnType());
}
}
}
getDeclaredMethod方法,获取某个存在的方法
//获取某个成员方法 ,后面填写方法名称,还有参数类型,
//参数类型需要按照方法的顺序填写不填则是无参方法
Method aaa = c.getDeclaredMethod("aaa");
System.out.println(aaa);
getMethods方法,可以获取到由public修饰的所有代码
//通过getMethods方法获取由public修饰的全部方法,使用for循环遍历出来
for (Method met : c.getMethods()) {
System.out.println(met.getName()
+"===---===="+met.getParameterCount()
+"-------"+met.getReturnType());
}
getMethod 获取某个由public修饰的成员方法
//获取某个成员方法 ,后面填写方法名称,还有参数类型,只能找到由public修饰的方法
//参数类型需要按照方法的顺序填写不填则是无参方法
Method aaa = c.getDeclaredMethod("aaa");
System.out.println(aaa);