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 }