反射-通过反射获取无参无返回值成员方法、带参带返回值成员方法并使用

来源:互联网 发布:mac地址有什么用 编辑:程序博客网 时间:2024/05/21 11:17
package cn.itcast_04;import java.lang.reflect.Constructor;import java.lang.reflect.Method;public class ReflectDemo {public static void main(String[] args) throws Exception {// 获取字节码文件对象Class c = Class.forName("cn.itcast_01.Person");// 获取所有的方法// Method[] methods = c.getMethods(); // 获取自己的包括父亲的公共方法// Method[] methods = c.getDeclaredMethods(); // 获取自己的所有的方法// for (Method method : methods) {// System.out.println(method);// }Constructor con = c.getConstructor();Object obj = con.newInstance();// 获取单个方法并使用// public void show()// public Method getMethod(String name,Class<?>... parameterTypes)// 第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型Method m1 = c.getMethod("show");// public Object invoke(Object obj,Object... args)// 返回值是Object接收,第一个参数表示对象是谁,第二参数表示调用该方法的实际参数m1.invoke(obj); // 调用obj对象的m1方法// public void method(String s)Method m2 = c.getMethod("method", String.class);m2.invoke(obj, "hello");// public String getString(String s, int i)Method m3 = c.getMethod("getString", String.class, int.class);// 任何类型都可以用Object接收Object objString = m3.invoke(obj, "hello", 100);System.out.println(objString);// String s = (String)m3.invoke(obj, "hello",100);你明确知道是什么类型,可以强转回来// System.out.println(s);// private void function()Method m4 = c.getDeclaredMethod("function");m4.setAccessible(true);m4.invoke(obj);}}



阅读全文
0 0
原创粉丝点击