使用Java Reflection列出类的方法

可以使用java.lang.Class.getDeclaredMethods()方法列出类的方法。此方法返回一个数组,其中包含具有公共,私有,受保护和默认访问权限的所有Method对象。但是,不包括继承的方法。

另外,getDeclaredMethods()如果类或接口没有方法,或者在Class对象中表示原始类型,数组类或void ,则该方法返回零长度数组。

演示此的程序如下所示-

示例

import java.lang.reflect.*;
public class Demo {
   public static void main(String[] args) {
      Class c = Thread.class;
      Method[] methods = c.getDeclaredMethods();
      for(int i = 0; i < methods.length; i++) {
         System.out.println("The method is: " + methods[i].toString());
      }
   }
}

输出结果

The method is: public void java.lang.Thread.run()
The method is: private void java.lang.Thread.exit()
The method is: private void java.lang.Thread.dispatchUncaughtException(java.lang.Throwable)
The method is: public java.lang.String java.lang.Thread.toString()
The method is: protected java.lang.Object java.lang.Thread.clone() throws java.lang.CloneNotSupportedException
The method is: public boolean java.lang.Thread.isInterrupted()
The method is: private native boolean java.lang.Thread.isInterrupted(boolean)
The method is: public static native java.lang.Thread java.lang.Thread.currentThread()
The method is: private static native void java.lang.Thread.registerNatives()
The method is: public final java.lang.String java.lang.Thread.getName()
The method is: public synchronized void java.lang.Thread.start()
The method is: public final synchronized void java.lang.Thread.join(long,int) throws java.lang.InterruptedException
The method is: public final synchronized void java.lang.Thread.join(long) throws java.lang.InterruptedException
The method is: public final void java.lang.Thread.join() throws java.lang.InterruptedException
The method is: private void java.lang.Thread.init(java.lang.ThreadGroup,java.lang.Runnable,java.lang.String,long,java.security.AccessControlContext,boolean)
The method is: private void java.lang.Thread.init(java.lang.ThreadGroup,java.lang.Runnable,java.lang.String,long)
The method is: public final java.lang.ThreadGroup java.lang.Thread.getThreadGroup()
The method is: public java.lang.StackTraceElement[] java.lang.Thread.getStackTrace()
The method is: public static native boolean java.lang.Thread.holdsLock(java.lang.Object)
The method is: public final void java.lang.Thread.checkAccess()
The method is: public static void java.lang.Thread.dumpStack()
The method is: public static native void java.lang.Thread.yield()
The method is: public final void java.lang.Thread.setPriority(int)
The method is: public final void java.lang.Thread.setDaemon(boolean)
The method is: private static synchronized int java.lang.Thread.nextThreadNum()
The method is: private static synchronized long java.lang.Thread.nextThreadID()
The method is: void java.lang.Thread.blockedOn(sun.nio.ch.Interruptible)
The method is: public static native void java.lang.Thread.sleep(long) throws java.lang.InterruptedException
The method is: public static void java.lang.Thread.sleep(long,int) throws java.lang.InterruptedException
The method is: private native void java.lang.Thread.start0()
The method is: public final synchronized void java.lang.Thread.stop(java.lang.Throwable)
The method is: public final void java.lang.Thread.stop()
The method is: public void java.lang.Thread.interrupt()
The method is: public static boolean java.lang.Thread.interrupted()
The method is: public void java.lang.Thread.destroy()
The method is: public final native boolean java.lang.Thread.isAlive()
The method is: public final void java.lang.Thread.suspend()
The method is: public final void java.lang.Thread.resume()
The method is: public final int java.lang.Thread.getPriority()
The method is: public final synchronized void java.lang.Thread.setName(java.lang.String)
The method is: public static int java.lang.Thread.activeCount()
The method is: public static int java.lang.Thread.enumerate(java.lang.Thread[])
The method is: public native int java.lang.Thread.countStackFrames()
The method is: public final boolean java.lang.Thread.isDaemon()
The method is: public java.lang.ClassLoader java.lang.Thread.getContextClassLoader()
The method is: public void java.lang.Thread.setContextClassLoader(java.lang.ClassLoader)
The method is: public static java.util.Map java.lang.Thread.getAllStackTraces()
The method is: private static boolean java.lang.Thread.isCCLOverridden(java.lang.Class)
The method is: private static boolean java.lang.Thread.auditSubclass(java.lang.Class)
The method is: private static native java.lang.StackTraceElement[][] java.lang.Thread.dumpThreads(java.lang.Thread[])
The method is: private static native java.lang.Thread[] java.lang.Thread.getThreads()
The method is: public long java.lang.Thread.getId()
The method is: public java.lang.Thread$State java.lang.Thread.getState()
The method is: public static void java.lang.Thread.setDefaultUncaughtExceptionHandler(java.lang.Thread$UncaughtExceptionHandler)
The method is: public static java.lang.Thread$UncaughtExceptionHandler java.lang.Thread.getDefaultUncaughtExceptionHandler()
The method is: public java.lang.Thread$UncaughtExceptionHandler java.lang.Thread.getUncaughtExceptionHandler()
The method is: public void java.lang.Thread.setUncaughtExceptionHandler(java.lang.Thread$UncaughtExceptionHandler)
The method is: static void java.lang.Thread.processQueue(java.lang.ref.ReferenceQueue,java.util.concurrent.ConcurrentMap)
The method is: private native void java.lang.Thread.setPriority0(int)
The method is: private native void java.lang.Thread.stop0(java.lang.Object)
The method is: private native void java.lang.Thread.suspend0()
The method is: private native void java.lang.Thread.resume0()
The method is: private native void java.lang.Thread.interrupt0()
The method is: private native void java.lang.Thread.setNativeName(java.lang.String)