Java中的Import語句如何理解?

weixin_34293059發表於2017-07-04

作用:

編譯時:它只是進行語法檢查和格式轉換;與標頭檔案作用相同。

執行時:依賴類載入。

 

http://bbs.csdn.net/topics/390397328

前面說的java的編譯,這裡糾正一下,我是參照c++將原始檔編譯成機器碼這個過程而言,也就是說,我前面說的java編譯是特指轉換成機器碼這個過程。

1,java為了遮蔽平臺無關性而使用了java虛擬機器,而虛擬機器本身是與平臺有關的,就是我們平時看到的windows版本和linux版本而且還有32位和64位之分,但作為一個開發者,我們寫程式碼時很少考慮到這些。
2,正是由於要經歷虛擬機器,所以java的編譯可以看作分為兩個步驟進行:前端編譯(javac)和後端編譯(JIT)。當然現在也有一步到位的編譯器。
3,我們通常所說的java編譯大多是指前面編譯,也就是前面提到的,將java原始檔轉換成jvm規範的一種格式,雖然它也是二進位制的,但是它只能被虛擬機器所識別。但是我們知道,java虛擬機器其實並不是只能執行由java語言寫成的程式碼,它也可以執行groovy, jpython這樣的語言寫成的原始碼,這些原始碼都會經歷前端編譯。前面編譯不會做連結工作,它只是進行語法檢查和格式轉換。
4,早期的虛擬機器會以解釋執行的方式來執行程式碼,我們都知道,解釋執行的效能是沒有編譯執行快的,這也是為什麼總是說java慢的原因。後來java加入即時編譯器(JIT)使得java可以以解釋執行和編譯執行兩種方式來執行程式碼。這一階段,我們可以稱之為後端編譯。在這個時候,虛擬機器將class檔案編譯成機器碼,並連結其它檔案。

所以從這個角度來看,import在前端編譯時,不會做什麼實質性的事情,只是一個標識而已。在後端編譯時,虛擬機器會根據所需要的類優化匯入,據說JIT可以在執行進蒐集到更多的資訊從而可以編譯出在效能上可以達到甚至超過c++的機器碼。

相關文章