标签:
反射:
若程序运行时接收到外部传入的一个对象,该对象的编译类型是Object,但程序又需要调用该对象运行类型的方法:
1.若编译和运行类型都知道,使用 instanceof判断后,强转。
2.编译时根本无法预知该对象的类属于哪些类,程序只能依靠运行时信息来发现对象和类的真实信息,这是反射就必须使用了。
3.要是想通过对象来找其对应的类名,就得使用反射。
Class类和Class类实例
获得Class对象
类被加载后,系统会为该类生成对应的Class对象,通过Class对象可以访问到JVM中的这个类,3种方式:
Class类中boolean isPrimitive() :判定 Class 对象是否表示一个基本类型。(8个基本数据类型+void)
包装类和Void类的静态TYPE属性: Integer.TYPE == int.class ;
数组类型的Class实例对象:Class<String[]> clz = String[].class;
boolean isArray() :判定此 Class 对象是否表示一个数组类。
从Class中获取信息
-构造方法Constructor
Constructor<T> getConstructor(Class<?>... parameterTypes)
返回该Class对象表示类的指定的public构造方法。
Constructor<?>[] getConstructors()
返回该Class对象表示类的所有public构造方法。
-方法Method
Method getMethod(String name, Class<?>... parameterTypes)
返回该Class对象表示类和其父类的指定的public方法。
Method[] getMethods():
返回该Class对象表示类和其父类的所有public方法。
-字段Field
Field getField(String name)
返回该Class对象表示类和其父类的指定的public属性。
Field[] getFields()
返回该Class对象表示类和其父类的所有public属性。
标签:
原文地址:http://www.cnblogs.com/xiedz/p/4729931.html