Java的反射机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。
注:每个类被加载之后,系统都会为该类生成一个对应的Class对象,通过Class对象就可以访问到JVM中该类的信息,一旦类被加载到JVM中,同一个类将不会被再次载入。被载入JVM的类都有一个唯一标识就是该类的全名(包名和类名)。
获取Class类对应有
1、使用Class类的静态方法forName(String className),其中参数className标识所需类的全名,
如Class obj = Class.forName("java.lang.String")
2、用类名调用该类的class属性来获得该类对应的Class对象,如Class obj = String.class
3、用对象调用getClass()方法来获得该类对应的Class对象,如Person p = new Person();Class obj = p.getClass();
获取相关方法、属性
调用指定方法:
通过Class类的getMethod(String name,Class…parameterTypes)方法取得一个Method对象,并设置此方法操作时所需要的参数类型。
之后使用Object invoke(Object obj, Object[] args)进行调用,并向方法中传递要设置的obj对象的参数信息。
说明:
1.Object对应原方法的返回值,若原方法无返回值,此时返回null
2.若原方法若为静态方法,此时形参obj可为null
3.若原方法形参列表为空,则args为null
4.若原方法声明为private,则需要在调用此invoke()方法前,显式调用方法对象的 setAccessible(true)方法,将可访问private的方法。
调用指定属性:
通过Field类提供的set()和get()方法就可以完成设置和取得属性内容的操作。
public Field getField(String name)返回public的Field相关属性。
public Field getDeclaredField(Str