List methods of a class using Java Reflection

The methods of a class can be listed using the java.lang.Class.getDeclaredMethods() method. This method returns an array that contains all the Method objects with public, private, protected and default access. However, the inherited methods are not included.
Also, the getDeclaredMethods() method returns a zero length array if the class or interface has no methods or if a primitive type, array class or void is represented in the Class object.
A program that demonstrates this is given as follows −
 Live Demo
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)