1. Java的特點
跨平臺性:
Java的 “編寫一次,運行無處不在” 是其最大的特點之一。Java編譯器將源代碼編譯成字節碼(bytecode),該字節碼可以在任何安裝了Java虛擬機(JVM)的系統上運行。
面向對象:
Java是一門嚴格的面向對象編程語言,幾乎一切都是對象。面向對象編程(0OP)特性使得代碼更易于維護和重用,包括類(class)、對象(object)、繼承(inheritance)、多態(polymorphism)、抽象(abstraction)和封裝(encapsulation)。
內存管理:
Java有自己的垃圾回收機制,自動管理內存和回收不再使用的對象。這樣,開發者不需要手動管理內存,從而減少內存泄漏和其他內存相關的問題。
2. Java的優劣勢
優勢:
- 跨平臺:因為JVM的存在,可以實現一次編寫到處運行。
- 面向對象:雖然現在很多語言都支持面向對象,但是Java的設計從一開始就是OOP的。
- 生態系統強大:比如Spring框架,Hibernate,各種庫和工具,社區支持大,企業應用廣泛。
- 內存管理:自動垃圾回收機制,減少了內存泄漏的問題,對開發者友好。
- 多線程:內置的線程機制,方便并發編程。
- 安全性:Java有安全模型,比如沙箱機制,適合網絡環境。
- 穩定性:企業級應用長期使用,版本更新也比較注重向后兼容。
劣勢:
- 性能方面:雖然JVM優化了很多,但相比C++或者Rust這種原生編譯語言,還是有一定開銷。特別是啟動時間,比如微服務場景下,可能不如Go之類的快。
- 語法方面:比如樣板代碼多,之前沒有lambda的時候更麻煩,現在有了但比起Python還是不夠簡潔。
- 內存消耗方面:JVM本身占內存,對于資源有限的環境可能不太友好。
- 面對對象過于嚴格:有時候寫簡單程序反而麻煩,雖然Java8引入了函數式編程,但不如其他語言自然。
- 開發效率:相比動態語言如Python,Java需要更多代碼,編譯過程也可能拖慢開發節奏。
3. Java為什么是跨平臺的
Java能支持跨平臺,和JVM有密不可分的關系
JVM也是一個軟件,不同的平臺有不同的版本。我們編寫的Java源碼,編譯后會生成一種 .class 文件,稱為字節碼文件。Java虛擬機就是負責將字節碼文件翻譯成特定平臺下的機器碼然后運行。也就是說,只要在不同平臺上安裝對應的JVM,就可以運行字節碼文件,運行我們編寫的Java程序。
而這個過程中,我們編寫的Java程序沒有做任何改變,僅僅是通過JVM這一"中間層",就能在不同平臺上運行,真正實現了"一次編譯,到處運行"的目的。
所以,運行Java程序必須有JVM的支持,因為編譯的結果不是機器碼,必須要經過JVM的再次翻譯才能執行。即使你將Java程序打包成可執行文件(例如.exe),仍然需要JVM的支持。
跨平臺的是Java程序,不是JVM。JVM是用C/C++開發的,是編譯后的機器碼,不能跨平臺,不同平臺下需要安裝不同版本的JVM。
4.?JVM、JRE、JDK三者的關系
JVM:JVM是Java虛擬機,是Java程序運行的環境。它負責將Java字節碼(由Java編譯器生成)解釋或編譯成機器碼,并執行程序。JVM提供了內存管理、垃圾回收、安全性等功能,使得Java程序具備跨平臺性。
JRE:JRE是Java運行時環境,是Java程序運行所需的最小環境。它包含了JVM和一組Java類庫,用于支持Java程序的執行。JRE不包含開發工具,只提供Java程序運行所需的運行環境。
JDK:JDK是Java開發工具包,是開發Java程序所需的工具集合。它包含了JVM、編譯器(javac)、調試器(jdb)等開發工具,以及一系列的類庫(如Java標準庫和開發工具庫)。JDK提供了開發、編譯、調試和運行Java程序所需的全部工具和環境。
5. Python和Java的區別
python是一種解釋語言,翻譯時會在執行程序的同時進行翻譯。
Java是一種已編譯的編程語言,Java編譯器將源代碼編譯為字節碼,而字節碼則由Java虛擬機執行
6. 編譯型語言和解釋型語言的區別
它們的核心區別在于代碼執行前是否需要整體翻譯為機器碼。
編譯形語言:在程序運行前,需通過編譯器將整個源代碼一次性翻譯成機器碼(可執行文件),然后運行。執行時直接運行編譯后的代碼,速度快,但跨平臺性較差。
解釋型語言:源代碼在運行時通過解釋器逐行翻譯并執行,無需事先編譯為機器碼。跨平臺性好,但執行速度相對較慢。
常見的編譯形語言有,C、C++、Rust
常見的解釋型語言有,Python、JavaScript
值得注意的是,Java屬于混合型語言,Java:先編譯為字節碼(.class),由 JVM 解釋或 JIT 編譯執行。
總結一下,編譯型語言就像是將整本書翻譯成目標語言再出版;解釋型語言就像是一邊讀一邊口頭翻譯。