Java中的Import語句如何理解?


作用:

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

運行時:依賴類加載。

 

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++的機器碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM