Java反射获取成员方法

来源:互联网 发布:淘宝主图尺寸怎么调整 编辑:程序博客网 时间:2024/05/22 21:14

【通过反射获取成员方法并使用】 

获取所有方法

getMethods

getDeclaredMethods

Method[] methods = c.getMethods(); // 获取自己的包括父亲的公共方法

Method[] methods = c.getDeclaredMethods(); // 获取自己的所有的方法

for (Method method : methods) {

   System.out.println(method);//打印出所有的方法

}

获取单个方法

getMethod

getDeclaredMethod

暴力访问

method.setAccessible(true);

 

获取单个方法并使用

        获取字节码文件对象

    Class c = Class.forName("cn.iponkan.Person");

        通过无参构造方法创建对象

Constructor con = c.getConstructor();

Object obj = con.newInstance();

 

// 现在要获取Person类中public void show()方法

// public Method getMethod(String name,Class<?>... parameterTypes)

// 第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型

 

Method m1 = c.getMethod("show");

// obj.m1(); // 错误

// public Object invoke(Object obj,Object... args)

// 返回值是Object接收,第一个参数表示对象是谁,第二参数表示调用该方法的实际参数

m1.invoke(obj); // 调用obj对象的m1方法

 

//获取Person中public void method(String s)方法

Method m2 = c.getMethod("method", String.class);

m2.invoke(obj, "hello");

 

// 获取Person中public String getString(String s, int i)方法

Method m3 = c.getMethod("getString", String.class, int.class);

Object objString = m3.invoke(obj, "hello", 100);

 

//获取Person 中 private void function()方法

Method m4 = c.getDeclaredMethod("function");

m4.setAccessible(true);//私有会出现暴力访问

m4.invoke(obj);


Person类的代码:

public class Person {private String name;int age;public String address;public Person() {}private Person(String name) {this.name = name;}Person(String name, int age) {this.name = name;this.age = age;}public Person(String name, int age, String address) {this.name = name;this.age = age;this.address = address;}public void show() {System.out.println("show");}public void method(String s) {System.out.println("method " + s);}public String getString(String s, int i) {return s + "---" + i;}private void function() {System.out.println("function");}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", address=" + address+ "]";}}



原创粉丝点击