目录
反射主要的API
Class类
在Object类中定义了以下的方法,此方法将被所有子类继承:public final Class getClass()
以上的方法返回值的类型是一个Class类,此类是Java反戴的这和实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过
对象反射求出类的名称
反射可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE都为其保留一个不变的Class类型的对象。个Class对象包含了特定某个类的有关信息。
class本身也是一个类
Class对象只能由系统建立对象
一个类在JVM中只会有一个Class实例
一个Class对象对应的是一个加载到JvM中的一个.class文件每个类的实例都会记得自己是由哪个Class实例所生成通过Class可以完整地得到一个类中的完整结构
实例化Class类对象四种方法
通过反射调用类的完整结构
实现的全部接口。继承的父类
Class clazz1=Dian.class;
Class clazz2=yzt.getClass();
Class superClass=clazz2.getSuperclass();
Class[] interfaces=clazz2.getInterfaces();
获取类的全部构造器
通过反射创造对象
调用无参公有构造方法
Class clazz=Dian.class;
Object ob=clazz.newInstance();
Dian other=(Dian)ob;
指定某一个带有参数的公有构造方法
Class clazz=Dian.class;
Constructor c=clazz.getConstructor(String.class);
Dian other=(Dian)c.newInstance("我是那个参数");
调用private
通过反射获取类的方法
修饰符 1 代表public 2 代表private
Class clazz=Dian.class;
获取类的所有公有方法
Method[] meth=clazz.getMethods();
获取类的所有private public 的方法
clazz.getDeclaredMethods()
for (Method method : meth) {
method.getName()//获取名字
method.getTypeParameters()//返回数组 数组内是方法的所有参数类型
method.getModifiers();//返回修饰符
method.getReturnType();//返回值类型
}
获取类的属性和包
和获取方法的类似
通过反射调用类中指定方法和属性
想要调用私有的 就是getDeclaredMethod前提是要解除私有封装setAccessible(true)
name就是对应属性名称