ClassInfo.java



import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/** クラスの情報を調べる ClassInfo */

public class ClassInfo {

   /** 最初に呼び出されるメソッド */

     public static void main( String argv[] ) {

         try {
              if( argv.length != 1 ) {

                  System.out.println("Usage:java ClassInfo classname");
                  System.exit(0);
              }
              Class cls = Class.forName( argv[0] ); // クラス情報のオブジェクト

              Method[] methods = cls.getMethods(); // メソッドの一覧情報を得る

              for( int i=0; i<methods.length; i++ ) {

                 String name = methods[i].getName(); //メソッド名を記憶

                 String access;  // アクセスモードの情報を記憶
                 int flag = methods[i].getModifiers(); // 修飾子の情報を得る
                 if( Modifier.isPublic(flag) ) access = "public";
                 else if( Modifier.isProtected(flag) ) access = "protected";
                 else if( Modifier.isPrivate(flag) ) access = "private";
                 else access = "";

                 Class c = methods[i].getReturnType();  // 返値のクラス
                 String returnType = c.getName();   // 返値のクラス名を記憶
                 
                 Class[] prms = methods[i].getParameterTypes();
                 StringBuffer prmTypes 
                            = new StringBuffer("");  // 引数の型を記憶する
                 for( int j=0; j<prms.length-1; j++ )
                      prmTypes.append( prms[j].getName() + ", " );
                 if( prms.length >= 1 )
                      prmTypes.append( prms[prms.length-1].getName() );

                 System.out.println( access + " " + returnType + " "
                                     + name + "(" + prmTypes + ")" );
              }
         }
         catch( SecurityException e ){

              System.out.println("Can not access the class");
              System.exit(0);
         }
         catch( ClassNotFoundException e ){

              System.out.println("No such class");
              System.exit(0);
         }
     }
}