A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 星辉祝愿 中级黑马   /  2015-6-2 12:18  /  463 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

反射指定类中的方法:
1.获取指定方法;
    getMethods();//获取的是该类中的公有方法和父类
getDeclaredMethods();//获取本类中的方法,包含私有方法。
2. 获取指定方法;
getMethod(methorName, obj, obj); //想要运行指定方法,当然是方法对象最清楚,为了让方法运行,调用方法对象的invoke方法即可,但是方法运行必须要明确所属的对象和具体的实际参数。
method.invoke(obj, 39,"hehehe");//执行一个方法
3. 想要运行私有方法。
//想要获取私有方法。必须用getDeclearMethod();
    Method method = clazz.getDeclaredMethod("method", null);
    // 私有方法不能直接访问,因为权限不够。非要访问,可以通过暴力的方式。
    method.setAccessible(true);//一般很少用,因为私有就是隐藏起来,所以尽量不要访问。
4. 反射静态方法。
clazz.getMethod("function",null);
    method.invoke(null,null); //只需要将invoke方法的第一个参数设为null即可!
  1. import java.lang.reflect.Method;

  2. public class test2 {

  3.         public static void main(String[] args) throws Exception {
  4.                 method_1();
  5.                 method_2();
  6.                 method_3();
  7.                 method_4();

  8.         }

  9.         //获取类中所有的方法。
  10.         public static void method_1() throws Exception {
  11.                 Class clazz = Class.forName("javaenhance.Person");
  12.                 Method[] methods = clazz.getMethods();//获取的是该类中的公有方法和父类中的公有方法。
  13.                 methods = clazz.getDeclaredMethods();//获取本类中的方法,包含私有方法。
  14.                 for(Method method : methods) {
  15.                         System.out.println(method);
  16.                 }
  17.                 System.out.println("获取类中所有的方法");
  18.                 System.out.println();
  19.                 }
  20.         //获取指定方法;
  21.         public static void method_2() throws Exception {
  22.                 Class clazz = Class.forName("javaenhance.Person");
  23.                 //获取指定名称的方法。
  24.                 Method method = clazz.getMethod("sayHello", int.class,String.class);
  25.                 //想要运行指定方法,当然是方法对象最清楚,为了让方法运行,
  26.                 //调用方法对象的invoke方法即可,但是方法运行必须要明确所属的对象和具体的实际参数。
  27.                 Object obj = clazz.newInstance();
  28.                 System.out.println(method.invoke(obj, 39,"Love"));//执行一个方法
  29.                        
  30.                 System.out.println("获取指定方法");
  31.                 System.out.println();
  32.                 }
  33.                
  34.                 //想要运行私有方法。
  35.                 public static void method_3() throws Exception {
  36.                         Class clazz = Class.forName("javaenhance.Person");
  37.                         //想要获取私有方法。必须用getDeclearMethod();
  38.                         Method method = clazz.getDeclaredMethod("myPrivate", null);
  39.                         // 私有方法不能直接访问,因为权限不够。非要访问,可以通过暴力的方式。
  40.                         method.setAccessible(true);//一般很少用,因为私有就是隐藏起来,所以尽量不要访问。
  41.                
  42.                        
  43.                 }
  44.                 //反射静态方法。
  45.                 public static void method_4() throws Exception {
  46.                         Class clazz = Class.forName("java.lang.Math");
  47.                         Method method = clazz.getMethod("abs", long.class);
  48.                         //只需要将invoke方法的第一个参数设为null即可!
  49.                         System.out.println(method.invoke(null, -10000l));
  50.                         System.out.println("反射静态方法。");
  51.                 }

  52. }
  53. class Person {
  54.        
  55.         private String name;
  56.         private int age;
  57.        
  58.         public Person() {
  59.         }

  60.         public Person(String name, int age) {
  61.                
  62.                 this.name = name;
  63.                 this.age = age;
  64.         }
  65.        
  66.         public String toString(){
  67.                 return "name:"+name+" age:"+age;
  68.         }
  69.        
  70.         public String sayHello(int age,String name){
  71.                 return "My name is "+name+","+age+"years old ,nice to meet you ";
  72.         }
  73.        
  74.         private void myPrivate(){
  75.                 System.out.println("i am private");
  76.         }
  77.        
  78.         public String getName() {
  79.                 return name;
  80.         }
  81.         public void setName(String name) {
  82.                 this.name = name;
  83.         }
  84.         public int getAge() {
  85.                 return age;
  86.         }
  87.         public void setAge(int age) {
  88.                 this.age = age;
  89.         }
  90.        
  91. }
复制代码


运行结果:
public int javaenhance.Person.getAge()
public void javaenhance.Person.setAge(int)
public java.lang.String javaenhance.Person.sayHello(int,java.lang.String)
private void javaenhance.Person.myPrivate()
public java.lang.String javaenhance.Person.toString()
public java.lang.String javaenhance.Person.getName()
public void javaenhance.Person.setName(java.lang.String)
获取类中所有的方法

My name is Love,39years old ,nice to meet you
获取指定方法

10000
反射静态方法。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马