java反射---获取类的方法

来源:互联网 发布:网络教育大专,自考本科 编辑:程序博客网 时间:2024/06/11 04:15


/**
 *
 */
package cn.thcic;

import java.lang.reflect.Method;

/**
 * java反射---获取类的方法
 * <p>
 *
 * </p>
 * by Zhiwang Zhang on 2014年7月21日
 */
public class Test109 {
 public static void main(String[] args) {
  // 通过Class类来获取类的方法,共有以下四种方法:
  // 1、public Method[] getMethods(),获取所有的共有方法的集合
  Class classInfo = Test109.class;
  Method[] methods = classInfo.getMethods();
  System.out.println("public方法共有:" + methods.length);
  if (methods != null) {
   for (Method m : methods) {
    System.out.println(m.toString());
   }
  }
  // 2、public Method[] getDeclaredMethods(),获取所有的方法,不包括继承的方法
  Method[] methodsSec = classInfo.getDeclaredMethods();
  System.out.println("Test109的所有方法共有:" + methodsSec.length);
  if (methodsSec != null) {
   for (Method m : methodsSec) {
    System.out.println(m.toString());
   }
  }
  // 3、public Method getMethod(String name,Class<?>...
  // parameterTypes),获取指定公有方法 参数1:方法名 参数2:参数类型集合
  try {
   Method methodForRun = classInfo.getMethod("run", String.class,
     Long.class);
   // invoke(Object obj, Object... args),对带有指定参数的指定对象调用由此
   // Method对象表示的基础方法。
   Test109 test = (Test109) classInfo.newInstance();
   methodForRun.invoke(test, "zzw", 1L);
  } catch (Exception e) {
   e.printStackTrace();
  }

  // 4、public Method getDeclaredMethod(String name,Class<?>...
  // parameterTypes) 获取任意指定方法
  try {
   Method methodForSleep = classInfo.getDeclaredMethod("sleep",
     String.class);
   Test109 testSec = (Test109) classInfo.newInstance();
   int i = (int) methodForSleep.invoke(testSec, "lwz");
   System.out.println(i);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public void run(String name, Long age) {
  System.out.println("公有run()方法...");
 }

 private int sleep(String name) {
  System.out.println("私有sleep()方法...");
  return 1;
 }
}

0 0
原创粉丝点击