若通过Method的invoke()方法调用方法,而访问权限不足,则可以先使该方法变为可访问的调用一下方法: method.setAccessible(true);
例子:
public void testGetPrivateMethod() throws Exception{
try {
Object obj = Class.forName("cn.reflection.Student").newInstance();
Method cla = Class.forName("cn.reflection.Student").getDeclaredMethod("method", Integer.class);
//若需要通过反射执行私有方法可执行以下方法
cla.setAccessible(true);
System.out.println(cla.invoke(obj,1));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
获取当前类的父类 直接调用Class对象的getSuperClass()方法
例子:
public void testGetSuperClass() throws ClassNotFoundException{
String className = "cn.Person";
Class cla = Class.forName(className);
Class supercla = cla.getSuperclass();
System.out.println(supercla);
}
例子: 以下一个例子是获取指定的方法,该方法可能是父类中的方法
public Method getMethod(Class cla,String name,Class...args){
for(;cla != Object.class;cla = cla.getSuperclass()){
//这里的中断条件利用了异常处理,如果获取不到方法就会抛异常,但我们暂时不处理他
//使得程序处理下一次循环,直到能正确找到一个方法返回
try {
Method method = cla.getDeclaredMethod(name, args);
return method;
} catch (Exception e) {}
}
return null;
}