通过class.getMethos()方法获得类的所有公共方法包括父类的公共方法。
1 import lombok.Data;
2
3 /**
4 * Created by hunt on 2017/6/27.
5 * 测试的实体类
6 * @Data 编译后会自动生成set、get、无惨构造、equals、canEqual、hashCode、toString方法
7 */
8 @Data
9 public class Person {
10 private String name;
11 public String nickName;
12 private int age;
13 private void say(){
14 System.out.println("say hunt");
15 }
16 }
1 import java.lang.reflect.Method;
2
3 /**
4 * Created by hunt on 2017/6/27.
5 */
6 public class NewInstanceTest {
7 public static void main(String[] args) {
8 Class
9 try {
10 Method[] methods = personClass.getMethods();
11 for (Method m:methods) {
12 System.out.println(m);
13 }
14 } catch (Exception e) {
15 e.printStackTrace();
16 }
17 }
18 }
通过class.getDeclaredMethods()方法获得类的所有属性(公共,保护,默认,和私有方法)。
1 import java.lang.reflect.Method;
2
3 /**
4 * Created by hunt on 2017/6/27.
5 */
6 public class NewInstanceTest {
7 public static void main(String[] args) {
8 Class
9 try {
10 Method[] methods = personClass.getDeclaredMethods();
11 for (Method m:methods) {
12 System.out.println(m);
13 }
14 } catch (Exception e) {
15 e.printStackTrace();
16 }
17 }
18 }
注意:返回的方法数组中的元素没有排序,也没有任何特定的顺序。
获得具体的方法:
1 import java.lang.reflect.Method;
2
3 /**
4 * Created by hunt on 2017/6/27.
5 */
6 public class NewInstanceTest {
7 public static void main(String[] args) {
8 Class
9 try {
10 Person p = personClass.newInstance();
11 Method method = personClass.getMethod("setName", String.class);
12 method.invoke(p,"hunt");
13 System.out.println(p);
14 method = personClass.getMethod("getName");
15 System.out.println("getName方法"+method.invoke(p));
16 method = personClass.getDeclaredMethod("say");
17 method.setAccessible(true);//私有方法要授权
18 method.invoke(p);
19 } catch (Exception e) {
20 e.printStackTrace();
21 }
22 }
23 }
总结:personClass.getDeclaredMethod("say");
method.setAccessible(
true
);
基于对属性的保护,默认为false。这里相当于一个授权的过程,设置true来允许操作这个属性。