名前
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
コマンドは、保護されたフィールドとpublicフィールド、および渡されたクラスのメソッドを出力します。
javap
コマンドはマルチ・リリースJARに対応していません。 コマンドのクラス・パス形式を使用すると、マルチリリースであろうとなかろうと、すべてのJARファイルのベース・エントリが表示されます。 URLフォームを使用すると、引数のURL形式を使用して、逆アセンブルするクラスの特定のバージョンを指定できます。
javap
コマンドは、その出力をstdout
に表示します。
ノート:
--
スタイルのオプションをサポートするツールでは、gnuスタイルのオプションでは、空白文字ではなく等号(=
)を使用して、値からオプションの名前を区切ることができます。
javapのオプション
--help
、-help
、-h
または-?
-
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
定数を表示します。 --module
moduleまたは-m
module- 逆アセンブル対象となるクラスが含まれるモジュールを指定します。
--module-path
path- アプリケーション・モジュールの検索場所を指定します。
--system
jdk- システム・モジュールの検索場所を指定します。
--class-path
path、-classpath
pathまたは-cp
path-
javap
コマンドがユーザー・クラス・ファイルの検索に使用するパスを指定します。 デフォルトまたはCLASSPATH
環境変数が設定されている場合はオーバーライドされます。 -bootclasspath
path- ブートストラップ・クラス・ファイルの場所をオーバーライドします。
--multi-release
version- マルチ・リリースJARファイルで選択するバージョンを指定します。
-J
option-
指定したオプションを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
}