javap
javapコマンドは、1つ以上のクラス・ファイルを逆アセンブルする場合に使用します。
形式
javap [options] classes...-
options -
コマンド行オプションを指定します。「javapのオプション」を参照してください。
-
classes -
注釈の処理対象となる、空白で区切られた1つ以上のクラスを指定します。クラス・パスで見つかるクラスを、そのファイル名、URLまたは完全修飾クラス名を使用して指定できます。
例:
path/to/MyClass.classjar:file:///path/to/MyJar.jar!/mypkg/MyClass.classjava.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のクラスとメンバーを表示します(デフォルト)。
-
-privateまたは-p -
すべてのクラスとメンバーを表示します。
-
-c -
クラスのメソッドごとに、逆アセンブルされるコード(たとえば、Javaバイト・コードで構成される命令)を出力します。
-
-s -
内部の型シグニチャを出力します。
-
-sysinfo -
処理されるクラスのシステム情報(パス、サイズ、日付、MD5ハッシュ)を表示します。
-
-constants -
static final定数を表示します。 -
--module moduleまたは-m module -
逆アセンブル対象となるクラスが含まれるモジュールを指定します。
-
--module-path path -
アプリケーション・モジュールの参照先を指定します。
-
--system jdk -
システム・モジュールの検索場所を指定します。
-
--class-path path、-classpath pathまたは-cp path -
javapコマンドでユーザー・クラス・クラスの検索に使用するパスを指定します。デフォルトまたはCLASSPATH環境変数(設定されている場合)をオーバーライドします。 -
-bootclasspath path -
ブートストラップ・クラス・ファイルの場所をオーバーライドします。
-
-Joption -
指定したオプションをJVMに渡します。たとえば:
javap -J-version javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName「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
}