java是編譯型還是解釋型語言

Java這個語言很非凡!

一、你可以說它是編譯型的:因爲所有的Java代碼都是要編譯的,.java不經過編譯就什麼用都沒有。 
二、你可以說它是解釋型的:因爲java代碼編譯後不能直接運行,它是解釋運行在JVM上的,所以它是解釋運行的,那也就算是解釋的了。 
三、但是,現在的JVM爲了效率,都有一些JIT優化。它又會把.class的二進制代碼編譯爲本地的代碼直接運行,所以,又是編譯的。

      像C、C++ 他們經過一次編譯之後直接可以編譯成操作系統瞭解的類型,可以直接執行的,所以他們是編譯型的語言。沒有經過第二次的處理。而Java不一樣,他首先由編譯器編譯成.class類型的文件,這個是java自己類型的文件 然後在通過虛擬機(JVM)從.class文件中讀一行解釋執行一行,所以他是解釋型的語言,而由於java對於多種不同的操作系統有不同的JVM,所以,Java實現了真正意義上的跨平臺! 

請觀看下面兩張圖 瞭解一下Java的虛擬機機制: 
(1)java語言的編譯-->解釋--->執行過程  


(2)java的虛擬機 

      現在複習的時候,經看到很多地方都有人在討論java是哪種類型的語言(編譯型、解釋型),以前稍微有些接觸,但是概念比較模糊,爲了不至於讓別人的思想左右自己,所以查了些資料,找到了很多熱心網友給出的答案,終於有些明白。這裏先給出編譯型語言和解釋型語言的定義。 
定義: 
(1)編譯型語言:把做好的源程序全部編譯成二進制代碼的可運行程序。然後,可直接運行這個程序。 
(2)解釋型語言:把做好的源程序翻譯一句,然後執行一句,直至結束! 
區別: 
(1)編譯型語言,執行速度快、效率高;依靠編譯器、跨平臺性差些。 
(2)解釋型語言,執行速度慢、效率低;依靠解釋器、跨平臺性好。 

總結: 

      個人認爲,java是解釋型的語言,因爲雖然java也需要編譯,編譯成.class文件,但是並不是機器可以識別的語言,而是字節碼,最終還是需要 jvm的解釋,才能在各個平臺執行,這同時也是java跨平臺的原因。所以可是說java即是編譯型的,也是解釋型,但是假如非要歸類的話,從概念上的定義,恐怕java應該歸到解釋型的語言中。 
附: 
編譯型的語言包括:C、C++、Delphi、Pascal、Fortran 
解釋型的語言包括:Java、Basic、javascript、python

 java編譯器和解釋器的結構如下圖,等搞清楚了再寫。。。

 

本文轉自:https://www.cnblogs.com/zjushuiping/archive/2013/01/06/2848478.html ,尊重原創,感謝作者!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章