Java反射使用

61 阅读1分钟

(1)获取Class对象方法

Class c = p.getClass;
Class c2 = Person.class;
Class c3 = Class.forName(“com.xxx.Person”);

(2)获取父类

public Class<? super T> getSuperclass();

(3)获取类本身和其父类定义的公共、私有、保护的内部类

public Class<?>[] getClasses();

(4)获取定义它的外部类,匿名内部类

public Class<?> getEnclosingClass();

(5)获取类本身的所有字段,包括公有、保护、私有

public native Field[] getDeclaredField();

(6)获取类本身的指定字段,包括公有、保护、私有

public native Field getDeclaredField(String name) throws NoSuchFieldException;

(7)Field设置方法中,每个方法都有一个Object参数,对于非静态字段,它必须设置为具体类实例,而对于静态字段可设为null。对于私有字段,在进行访问的时候需要先调用field.setAccessible(true)。

(8)获取类本身所有方法

public Method[] getDeclaredMethods();

(9)获取类本身的指定方法

public Method getDeclaredMethod(String name,Class<?>... parameterTypes) throws NoSuchMethodException;

(10)执行方法

public native Object invoke(Object receiver,Object... args) ;

(11)反射获取Method对象方法

Class c = Class.forName(“com.xxx.Person”);
Constructor con = c.getConstructor(String.class,int.class);
Object obj = con.newInstance(“sds”,13);
Method m1 = c.getMethod(“show”,null);
m1.invoke(obj,null);