2013-04-15 42 views
0

假設有一個簡單的Java程序:Bytecode類文件是否包含JRElibrary函數?

package pkg; 
import java.lang.System; 
public class A { 
    public static void main(String[] args){ 
     System.out.println("\nhello, world\n good"); 
     System.out.println(args.length); 
    } 
} 

編譯後,我得到的A.class,字節碼文件。我想知道A.class是否包含庫函數println?我確定在C++/C中知道EXE將包含庫函數(而不是DLL版本)。

推導出的問題是JVM如何獲得println函數?當JVM從指定的JRE例程中解釋相應的語句「System.out.println(...)」時,它是動態加載的嗎?或者只是執行A.class文件中包含的println?


編輯:我可以說Java是動態鏈接標準庫? -

+0

沒有,JVM或JRE將包含庫函數 – NINCOMPOOP

回答

3

我想知道A.class是否包含庫函數println?

不,它不。如果您非常喜歡,可以使用javap命令(或反編譯器)來查看類文件中的內容。

一個派生的問題是JVM如何獲得println函數?

它從「rt.jar」文件加載,該文件構成您用於運行該程序的JRE/JDK的一部分。

這就是爲什麼你需要安裝一個JRE/JDK運行Java代碼的原因之一......

+1

「這就是爲什麼你需要相關的類文件安裝JRE/JDK以運行Java代碼「。這當然是一個原因。這不是唯一的原因。 –

+0

沒錯,一個理由就夠了。 –

+0

我很好奇爲什麼JAVA API包含在JRE中。現在我得到答案。 JVM以及JIT也需要庫類字節碼來解釋函數調用。 – Zachery