javap(1)

名前
javap - Java クラスファイル逆アセンブラ

クラスファイルを逆アセンブルします。

形式
javap [ options ] class...

機能説明
javap コマンドは、 Java クラスファイルを逆アセンブルします。 出力内容はオプションで指定します。 オプションを 1 つも指定しないと、 javap は渡されたクラスの package、 protected、 および public フィールドとメソッドを出力します。 javap コマンドの出力先は stdout です。たとえば、以下のクラス宣言をコンパイルします。

    import java.awt.*;
    import java.applet.*;
    public class DocFooter extends Applet {
    		String date;
    		String email;
    		public void init() {
    			resize(500,100);
    			date = getParameter("LAST_UPDATED");
    			email = getParameter("EMAIL");
    		}
    		public void paint(Graphics g) {
    			g.drawString(date + " by ",100, 15);
    			g.drawString(email,290,15);
    		}
    }

この場合、 javap DocFooter を実行すると以下の出力が得られます。
    Compiled from DocFooter.java
    public class DocFooter extends java.applet.Applet {
    	java.lang.String date;
    	java.lang.String email;
    	public void init();
    	public void paint(java.awt.Graphics);
    	public DocFooter();
    }

    javap -c DocFooter を実行すると以下の出力が得られます。

        Compiled from DocFooter.java
        public class DocFooter extends java.applet.Applet {
            java.lang.String date;
            java.lang.String email;
            public DocFooter();
            public void init();
            public void paint(java.awt.Graphics);
        }
        Method DocFooter()
           0 aload_0
           1 invokespecial #1 <Method java.applet.Applet()>
           4 return
        Method void init()
           0 aload_0
           1 sipush 500
           4 bipush 100
           6 invokevirtual #2 <Method void resize(int, int)>
           9 aload_0
          10 aload_0
          11 ldc #3 <String "LAST_UPDATED">
          13 invokevirtual #4 <Method java.lang.String getParameter(java.lang.String)>
          16 putfield #5 <Field java.lang.String date>
          19 aload_0
          20 aload_0
          21 ldc #6 <String "EMAIL">
          23 invokevirtual #4 <Method java.lang.String getParameter(java.lang.String)>
          26 putfield #7 <Field java.lang.String email>
          29 return
        Method void paint(java.awt.Graphics)
           0 aload_1
           1 new #8 <Class java.lang.StringBuffer>
           4 dup
           5 invokespecial #9 <Method java.lang.StringBuffer()>
           8 aload_0
           9 getfield #5 <Field java.lang.String date>
          12 invokevirtual #10 <Method java.lang.StringBuffer append(java.lang.String)>
          15 ldc #11 <String " by ">
          17 invokevirtual #10 <Method java.lang.StringBuffer append(java.lang.String)>
          20 invokevirtual #12 <Method java.lang.String toString()>
          23 bipush 100
          25 bipush 15
          27 invokevirtual #13 <Method void drawString(java.lang.String, int, int)>
          30 aload_1
          31 aload_0
          32 getfield #7 <Field java.lang.String email>
          35 sipush 290
          38 bipush 15
          40 invokevirtual #13 <Method void drawString(java.lang.String, int, int)>
          43 return

オプション

-help
    javap のヘルプメッセージを出力します。

-l  行番号と局所変数テーブルを表示します。

-b  JDK 1.1 の javap との下位互換性を保証します。

-public
    public クラスおよびメンバだけを表示します。

-protected
    protected および public のクラスとメンバだけを表示します。

-package
    package、protected、および public のクラスとメンバだけを表示します。これはデフォルトの設定です。

-private
    すべてのクラスとメンバを表示します。

-Jflag
    ランタイムシステムに直接 flag を渡します。使用例を次に示します。

    javap -J-version
    javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName

-s  内部の型シグニチャーを出力します。

-c  クラスの各メソッドのために逆アセンブルされるコード、すなわち Java バイトコードから成る命令を表示します。これらは
    http://java.sun.com/docs/books/vmspec/ の 「Java Virtual Machine Specification」にドキュメント化されています。

-verbose
    メソッドのスタックサイズ、および locals と args の数を出力します。

-classpath path
    javap がクラスを探すために使用するパスを指定します。デフォルトまたは CLASSPATH 環境変数設定を上書きします。ディレクトリはコロンで分割します。したがって、path の一般形式は次のようになります。

       .:<your_path>

    次に例を示します。

-bootclasspath path
    ブートストラップクラスをロードするパスを指定します。ブートストラップクラスは、デフォルトでは jre/lib/rt.jar および他のいくつかの JAR ファイル にある、コア Java プラットフォームを実装するクラスです。

-extdirs dirs
    インストールされた拡張機能を検索する場所をオーバーライドします。拡張機能は、デフォルトでは java.ext.dirs にあります。

環境変数

CLASSPATH
    ユーザ定義クラスへのパスをシステムに通知するために使用します。 複数のディレクトリを指定する場合はコロンで区切ります。 以下に例を示します。

    .:/home/avh/classes:/usr/local/java/classes

関連項目

javac、java、jdb、javah、javadoc