2012-09-06 46 views
2
//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 

以上是字節碼:運行Java字節碼

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

如果我只有字節碼,我該如何運行呢?我可以嗎?字節碼文件的擴展是什麼? Hi.class

+8

這絕對不是*該類的字節碼。該字節碼僅用於默認構造函數。 –

+1

你的意思是說你有字節碼的文本表示,並且你想在'.class'文件中編譯它? – Matteo

+0

對不起...現在編輯問題... – Daanish

回答

1

您可以使用具有自己格式的Jasmin編譯字節碼。你需要整個類的字節碼,而不僅僅是方法的主體。

一旦你有字節碼,你可以將它加載到自定義的類加載器中,或者在當前的類加載器上調用defineClass並運行它。

您可能會發現使用Compiler API或BeanShell編譯和運行源代碼更容易。

+0

謝謝Peter.I每次採取每種方法並生成字節碼。我假設這是生成字節碼的錯誤方法。是的,你能以正確的方式幫助我嗎? – Daanish

+0

字節碼是二進制的,你似乎在轉儲字節碼的文本表示,這只是爲了解你的理解,而不是爲了「編譯」而設計的。你用什麼工具「生成字節碼」? –

+0

首先你告訴「我只有字節碼」,現在你說你一次採取方法併爲它生成字節碼。你從哪裏採取方法?從一個.class文件? –