3
//bytecode of <init>
0:    aload_0
1:    invokespecial java.lang.Object.<init> ()V (8)
4:    return
//bytecode of <main>
0:    getstatic     java.lang.System.out Ljava/io/PrintStream; (16)
3:    ldc       "Hello World" (22)
5:    invokevirtual java.io.PrintStream.println (Ljava/lang/String;)V (24)
8:    return

上記は次のバイトコードです:

public class Hi {
  public static void main(String[] args) {
    System.out.println("Hello World");
  }
}

バイトコードしかない場合、どうすれば実行できますか?できますか?そして、バイトコードファイルの拡張は何ですか?Hi.class

4

1 に答える 1

1

独自のフォーマットを持つJasminを使用してバイトコードをコンパイルできます。メソッドの本体だけでなく、クラス全体のバイトコードが必要です。

バイトコードを取得したら、それをカスタムクラスローダーにロードするか、現在のクラスローダーでdefineClassを呼び出して実行できます。

コンパイラAPIまたはBeanShellを使用すると、ソースからのコンパイルと実行が簡単になる場合があります。

于 2012-09-06T10:42:27.453 に答える