javap
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のクラスとメンバーを表示します(デフォルト)。
-
-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
}