laredMethods获取的方法:");
for(Method m:declaredMethods)
System.out.println(m);
}
}
class MyClass {
public int add(int a, int b) {
return a + b;
}
public int sub(int a, int b) {
return a - b;
}
}
// 输出
/*
getMethods获取的方法:
public int com.shuofxz.basic.ReflectDemo$MyClass.add(int,int)
public int com.shuofxz.basic.ReflectDemo$MyClass.sub(int,int)
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
getDeclaredMethods获取的方法:
public int com.shuofxz.basic.ReflectDemo$MyClass.add(int,int)
public int com.shuofxz.basic.ReflectDemo$MyClass.sub(int,int)
*/
五)调用方法
当我们从类中获取了一个方法后,我们就可以用 invoke()
来调用这个方法。
public class ReflectDemo {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
Class<?> mc = MyClass.class;
Object obj = mc.newInstance();
//获取methodClass类的add方法
Method method = mc.getMethod("add", int.class, int.class);
//调用method对应的方法 => add(1,4)
Object result = method.invoke(obj, 1, 4);
System.out.println(result);
}
}
六)获取构造器、类的成员变量(字段)信息
- 通过 Class 类的 getConstructor 方法得到 Constructor 类的一个实例
- getFiled:访问公有的成员变量
- getDeclaredField:所有已声明的成员变量,但不能得到其父类的成员变量
四、小结
本篇文章初步介绍了反射机制。让大家了解了反射是什么,为什么会有反射这个功能,以及一些基本使用方式。后续文章将会反射的机制和原理做进一步的讲解。