名前
javap - 1つまたは複数のクラス・ファイルを逆アセンブル
シノプシス
javap [options] classes...
- options
- コマンド行オプションを指定します。 「javapのオプション」を参照してください。
- classes
- 注釈の処理対象となる、空白で区切られた1つ以上のクラスを指定します。 クラスパスには、ファイル名、URL、または完全修飾クラス名でクラスを指定できます。 - 例 - path/to/MyClass.class- jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class- java.lang.Object
説明
javapコマンドは、1つ以上のクラス・ファイルを逆アセンブルします。 出力は指定するオプションにより異なります。 オプションを使用しない場合、javapコマンドは、渡されたクラスのprotectedおよびpublicのフィールドとメソッドを出力します。 
javapコマンドは、マルチリリースJARを認識しません。 コマンドのクラス・パス形式を使用すると、マルチリリースであろうとなかろうと、すべてのJARファイルのベース・エントリが表示されます。 URLフォームを使用すると、引数のURL形式を使用して、逆アセンブルするクラスの特定のバージョンを指定できます。 
javapコマンドは、その出力をstdoutに表示します。
ノート:
--スタイルのオプションをサポートするツールでは、gnuスタイルのオプションでは、空白文字ではなく等号(=)を使用して、値からオプションの名前を区切ることができます。
javapのオプション
- -help、- --helpまたは- -?
- javapコマンドのヘルプ・メッセージを出力します。
- -version
- リリース情報を出力します。
- -verboseまたは- -v
- 選択されたクラスの追加情報を出力します。
- -l
- 行番号とローカル変数表を出力します。
- -public
- publicクラスおよびメンバーだけを表示します。
- -protected
- protectedおよびpublicのクラスとメンバーだけを表示します。
- -package
- package/protected/publicクラスとメンバー(default)を表示します。
- -privateまたは- -p
- すべてのクラスとメンバーを表示します。
- -c
- クラスのメソッドごとに、逆アセンブルされるコード(たとえば、Javaバイト・コードで構成される命令)を出力します。
- -s
- 内部の型シグニチャを出力します。
- -sysinfo
- 処理中のクラスのシステム情報(パス、サイズ、日付、SHA-256ハッシュ)を表示します。
- -constants
- static final定数を表示します。
- --modulemoduleまたは- -mmodule
- 逆アセンブル対象となるクラスが含まれるモジュールを指定します。
- --module-pathpath
- アプリケーション・モジュールの検索場所を指定します。
- --systemjdk
- システム・モジュールの検索場所を指定します。
- --class-pathpath、- -classpathpathまたは- -cppath
- javapコマンドでユーザー・クラス・クラスの検索に使用するパスを指定します。 デフォルトまたは- CLASSPATH環境変数(設定されている場合)をオーバーライドします。
- -bootclasspathpath
- ブートストラップ・クラス・ファイルの場所をオーバーライドします。
- --multi-releaseversion
- マルチ・リリースJARファイルで選択するバージョンを指定します。
- -Joption
- 指定したオプションをJVMに渡します。 次に例を示します。 - javap -J-version javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName- javaの「Javaオプションの概要」を参照してください。 
javapの例
次のHelloWorldFrameクラスをコンパイルします。
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class HelloWorldFrame extends JFrame {
   String message = "Hello World!";
   public HelloWorldFrame(){
        setContentPane(new JPanel(){
            @Override
            protected void paintComponent(Graphics g) {
                g.drawString(message, 15, 30);
            }
        });
        setSize(100, 100);
    }
    public static void main(String[] args) {
        HelloWorldFrame frame = new HelloWorldFrame();
        frame.setVisible(true);
    }
}javap HelloWorldFrame.classコマンドから生成される出力は、次のとおりです。
Compiled from "HelloWorldFrame.java"
public class HelloWorldFrame extends javax.swing.JFrame {
  java.lang.String message;
  public HelloWorldFrame();
  public static void main(java.lang.String[]);
}javap -c HelloWorldFrame.classコマンドから生成される出力は、次のとおりです。
Compiled from "HelloWorldFrame.java"
public class HelloWorldFrame extends javax.swing.JFrame {
  java.lang.String message;
  public HelloWorldFrame();
    Code:
       0: aload_0
       1: invokespecial #1        // Method javax/swing/JFrame."<init>":()V
       4: aload_0
       5: ldc           #2        // String Hello World!
       7: putfield      #3        // Field message:Ljava/lang/String;
      10: aload_0
      11: new           #4        // class HelloWorldFrame$1
      14: dup
      15: aload_0
      16: invokespecial #5        // Method HelloWorldFrame$1."<init>":(LHelloWorldFrame;)V
      19: invokevirtual #6        // Method setContentPane:(Ljava/awt/Container;)V
      22: aload_0
      23: bipush        100
      25: bipush        100
      27: invokevirtual #7        // Method setSize:(II)V
      30: return
  public static void main(java.lang.String[]);
    Code:
       0: new           #8        // class HelloWorldFrame
       3: dup
       4: invokespecial #9        // Method "<init>":()V
       7: astore_1
       8: aload_1
       9: iconst_1
      10: invokevirtual #10       // Method setVisible:(Z)V
      13: return
}