Java到底是編譯型語言還是解釋型語言?
轉載自網路
Java這個語言很神奇:
- 你可以說它是編譯型的。因為所有的Java程式碼都是要編譯的,.java不經過編譯就什麼用都沒有。
- 你可以說它是解釋型的。因為java程式碼編譯後不能直接執行,它是解釋執行在JVM上的,所以它是解釋執行的,那也就算是解釋的了。
- 但是,現在的JVM為了效率,都有一些JIT優化。它又會把.class的二進位制程式碼編譯為本地的程式碼直接執行,所以,又是編譯的。
像C、C++ 他們經過一次編譯之後直接可以編譯成作業系統瞭解的型別,可以直接執行的 所以他們是編譯型的語言。沒有經過第二次的處理 而Java不一樣他首先由編譯器編譯成.class型別的檔案,這個是java自己型別的檔案 然後在通過虛擬機器(JVM)從.class檔案中讀一行解釋執行一行,所以他是解釋型的語言,而由於java對於多種不同的作業系統有不同的JVM所以 Java實現了真正意義上的跨平臺!
請觀看下面兩張圖 瞭解一下Java的虛擬機器機制:
Java的編譯-->解釋-->執行過程
Java的虛擬機器
今天聽到同事在討論java是哪種型別的語言(編譯型、解釋型),以前稍微有些接觸,但是概念比較模糊,為了不至於讓別人的思想左右自己,所以查了些資料,找到了很多熱心網友給出的答案,終於有些明白。這裡先給出編譯型語言和解釋型語言的定義和區別。
- 編譯型語言:把做好的源程式全部編譯成二進位制程式碼的可執行程式。然後,可直接執行這個程式。
- 解釋型語言:把做好的源程式翻譯一句,然後執行一句,直至結束!
- 編譯型語言,執行速度快、效率高;依靠編譯器、跨平臺性差些。
- 解釋型語言,執行速度慢、效率低;依靠直譯器、跨平臺性好。
個人認為,java是解釋型的語言,因為雖然java也需要編譯,編譯成.class檔案,但是並不是機器可以識別的語言,而是位元組碼,最終還是需要 jvm的解釋,才能在各個平臺執行,這同時也是java跨平臺的原因。所以可是說java即是編譯型的,也是解釋型,但是假如非要歸類的話,從概念上的定義,恐怕java應該歸到解釋型的語言中。
- 編譯型的語言包括:C、C++、Delphi、Pascal、Fortran
- 解釋型的語言包括:Java、Basic、javascript