原文地址: https://blog.csdn.net/qq_42183409/article/details/88924176
简介
反射机制是指在运行状态中,对于任何一个类,都能够知道这个类的属性和方法;对于任何一个对象,都能调用他的属性的方法。
反射提供的功能:
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法
生成动态代理
通过反射获取类的三种方法:
通过Class.forName();
// 需要抛个ClassNotFoundException 异常
//通过类的全限定名获取Class对象, 基本类型无法使用此方法
try {
Class<?> forName = Class.forName("java.util.ArrayList");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
通过类名.
Class<?> forName = ArrayList.class;
通过对象.getClass( ),此方法需要NEW一对象出来
List<String> list = new ArrayList<String>();
Class<?> forName = list.getClass();
反射获取方法:
1.对象 .getMethods() 此方法可以获取所有的公共的方法
(本类,父类(包括object中的方法),以及接口中的所有方法,同时符合访问修饰符规律(private访问不到))
Class<?> forName = Class.forName("java.util.ArrayList");
forName .getMethods ( );
2.对象.getDeclareMethods() 来获取当前类的所有方法
Class<?> forName = Class.forName("java.util.ArrayList");
forName.getDeclareMethods( );
3.反射来带对类实例化
Object instance = forname.newInstance();
Person person=(person)instance ;
person.getMethods();
补充:
通过getInterface()方法获得所有接口 ,返回一个数组(多实现)
通过getSuperclass()来获取所有父类,返回单个值(单继承)
通过getConstructors(),来获取所有构造方法,返回数组
通过getFields()来获取所有公共属性,通过getDeclareFields()来获取当前类的所有属性,返回数组