🌟?想系統化學習 Java 編程?看看這個:[編程基礎] Java · 學習手冊
0x01:Java · 編程語言簡介
Java 是一種高級計算機編程語言,它是由 Sun Microsystems 公司(已被 Oracle 公司收購)于 1995 年 5 月推出的一種可以編寫跨平臺應用軟件、完全面向對象的程序設計語言。
0x0101:Java · 誕生史 — 從機頂盒到改變世界的編程語言
Java 的誕生史要追溯到 1991 年,由 Patrick Naughton 及其伙伴 James Gosling(被譽為 “Java之父” )帶領的 Sun 公司的工程師小組想要設計一種小型的計算機語言,主要是面向有線電視轉換盒這類的消費設備。
由于這些消費設備的處理能力和內存都很有限,所以要求語言必須非常短小且能夠生成非常緊湊的代碼。另外,由于不同的廠商會選擇不同的中央處理器(CPU),因此這種語言的關鍵是不能與任何特定的體系結構捆綁在一起。這個項目起初被命名為 “Green”。
為滿足消費電子設備的嚴苛要求,這種新語言必須具備 代碼精簡、運行高效 的特性,同時實現 跨平臺兼容 —— 即同一套代碼無需修改即可在不同硬件架構上運行。盡管 Sun 團隊擁有深厚的 UNIX系統開發背景,但鑒于 C++ 在 跨平臺能力 與 內存管理 上的局限性,他們決定以 C++ 語法為基礎進行改良重構。
在 James Gosling 的主導下,新語言初步定名為 Oak(靈感源自其辦公室窗外的一棵橡樹),意在體現其如同橡樹般穩健可靠的特性。然而,當準備對外發布時,團隊發現 "Oak" 已被其他編程語言占用,最終更名為 Java —— 這個名字既暗合開發團隊對咖啡文化的熱愛(Java是印尼著名咖啡產地),又隱喻著新語言能為開發者帶來如咖啡般提神的高效編碼體驗。
0x0102:Java · 發展史 — Java 版本迭代史
Java 語言發展到今天經歷了一系列的過程 (同時掃盲一波 Java 8 & Java 1.8):
-
1991 年:SUN 公司的 Green 項目,Oak 誕生
-
1995 年:推出 Java 測試版
-
1996 年:JDK 1.0 — JDK(Java 開發工具包)
-
1997 年:JDK 1.1
-
1998 年:JDK 1.2,大大改進了早期版本缺陷,是一個革命性的版本,更名為 Java2
-
2004 年:J2SE 5.0(1.5.0)Tiger 老虎稱為 Java 語言發展史上的又一里程碑,為了表示該版本的重要性,J2SE 1.5 更名為 Java SE 5.0
-
2005 年:Java 的各種版本進行更名,以取消其中的數字 “2”,J2ME 更名為 Java ME,J2SE 更名為 Java SE,J2EE 更名為 Java EE。
-
2006 年:Java SE 6.0(1.6.0)
-
2009 年:甲骨文(Oracle)收購 SUN,交易額高達 74 億
-
2011 年:JavaSE 7.0(1.7.0)
-
2014 年:JavaSE 8.0(1.8.0) - 長期支持
-
2017 年:Java 9.0
-
2018 年 3 月:Java 10
-
2018 年 9 月:Java 11 - 長期支持
-
2019 年 3 月:Java 12
-
2019 年 9 月:Java 13
-
2020 年 3 月:Java 14
-
2020 年 9 月:Java 15
-
2021 年 3 月:Java 16
-
2021 年 9 月:Java 17 - 長期支持
-
2022 年 3 月:Java 18
-
2022 年 9 月:Java 19
-
2023 年 3 月:Java 20
-
2023 年 9 月:Java 21,9 月 19 日,以六個月為更新頻次的 Java 正式發布了最新的長期支持版本 — Java 21,這一版本將獲得官方 5 年的重要支持,這意味著對于開發者、企業而言,如果想要用上穩定而前沿的 Java,JDK 21 無疑是最好的選擇。
-
2024 年 3 月:Java 22
Java · 知識掃盲:
Java 1.8 & Java 8 Java 1.8.0 & Java 8 其實是一樣的 😂。得益于 Java 神奇的版本迭代機制,搞亂了一堆初學者。
Java · 學習建議:關于 Java 學習版本的選擇
從 Java 的版本迭代史可以看出來,Java 的版本更新非常的快。對于我們初學者而言,筆者建議學習那些長期支持的版本,比如 8、11、17、21 版本。另外,對于語言的學習我們一開始并不推薦追求最新版,有以下幾點考量:
編程語言的基礎語法很難改動 => 學了低版本的基礎語法你到高版本僅僅是換個版本的事情。
新版本生態環境尚未搭建 => 新版本剛推出,參考資料比較少,除了 Bug 很難排查。
0x0103:Java · 體系結構 — SE & EE & ME
針對不同開發市場,Sun 公司將 Java 劃分為 3 個技術平臺(體系結構):
-
Java SE(Java Standard Edition):標準版,定位在個人計算機上使用
-
Java EE(Java Enterprise Edition):企業版,定位在服務器端的應用
-
Java ME(Java Micro Edition):微型版,定位在消費性電子產品的應用上
1. Java SE — 標準版 Java 技術平臺
適用場景: 開發普通桌面和商務應用程序
這個版本是 Java 平臺的核心,它提供了非常豐富的 API 來開發一般個人計算機上的應用程序,包括用戶界面接口 AWT 及 Swing,網絡功能和國際化、圖像處理高能力以及輸入輸出支持等。
在上個實際 90 年代末互聯網上大放異彩的 Applet 也屬于這個版本。Applet 后來被 Flash 取代,而 Flash 現在也被 HTML5 取代了。
2. Java EE — 企業版 Java 技術平臺
適用場景: 開發企業級應用程序
JavaEE 是 JavaSE 的擴展,增加了用于服務器開發的類庫。如:JDBC 讓程序員能直接在 Java 內使用SQL 的 語法來訪問數據庫內的數據;Servlet 能夠延伸服務器的功能,通過 請求-響應 的模式來處理客戶端的請求;JSP 是一種可以將 Java 程序代碼內嵌在網頁內的技術。
3. Java ME — 微型版 Java 技術平臺
適用場景: 開發電子消費產品和嵌入式設備
JavaME 是 JavaSE 的內伸,包含 J2SE 的一部分核心類,也有自己的擴展類,增加了適合微小裝置的類庫:javax.microedition.io.*
等。該版本針對資源有限的電子消費產品的需求精簡核心類庫,并提供了模塊化的架構讓不同類型產品能夠隨時增加支持的能力。
0x0104:Java · 語言特性
筆者備注:沒有最牛逼的語言,只有最適合的語言 !!
下面是 Java 的特性與優勢,簡而言之,Java 牛逼!!!
-
跨平臺/可移植性: Java 通過 JVM(Java Virtual Machine,Java 虛擬機)以及字節碼實現跨平臺性。Java 程序由 Javac 編譯器編譯為字節碼文件(
.class
文件),JVM 中的 Java 解釋器會將字節碼文件翻譯成所在平臺上的機器碼文件,執行對應的機器碼文件就可以了。Java 程序只要一次編寫,就可到處運行。 -
安全性:
-
Java 的存儲分配模型可以防御惡意代碼攻擊。
-
Java 沒有指針,外界不能通過偽造指針操作存儲器。
-
Java 編譯器在編譯程序時不顯示存儲安排策略,程序員不能通過查看聲明猜測出類的實際存儲安排。
-
Java 程序的存儲是在程序運行時由 Java 解釋程序決定的。
-
-
面向對象: 面向對象是一種程序設計技術,非常適合大型軟件的設計與開發。由于 C++ 為了照顧大量 C 語言使用者而兼容了 C,使得自身僅僅成為了帶類的 C 語言,多少影響了其面向對象的徹底性!而 Java 是完全的面向對象的語言。
-
簡單性: Java 使用引用代替指針,并提供了自動垃圾回收機制,使程序員不必擔心內存管理。
-
高性能: Java 最初發展階段,總是被人詬病 ”性能低“;客觀上,高級語言運行效率總是低于級語言的,這個無法避免。Java 語言本身發展中通過虛擬機的優化提升了幾十倍的運行效率。比如,通過 JIT(JUST IN TIME)即時編譯技術提高運行效率。將一些 ”熱點“ 字節碼編譯成本地機器碼,并將結果緩存起來,在需要的時候重新調用。這樣的話,使 Java 程序的執行效率大大提高,某些代碼甚至接近 C++ 的效率。
-
分布性: Java是為 Internet 的分布式環境設計的,因為它能夠處理 TCP/IP 協議。事實上,通過URL 訪問一個網絡資源和訪問本地文件是一樣簡單的。Java 還支持遠程方法調用(RMI,Remote Method Invocation),使程序能夠通過網絡調用方法。
-
多線程: 多線程的使用可以帶來更好的交互響應和實時行為。 Java 多線程的簡單性是 Java 成為主流服務器端開發語言的主要原因之一。
上面雖然羅列了 Java 這么多的好,但是并不是說它就是萬能的,每種語言都有自己適合的賽道,沒有最好,只有最適合。一個簡單的例子,C 的性能很好,但是語法復雜。Python 性能比 C 慢多了,但它學起來 Easy,所以 Python 對小白來說肯定優于 C。
0x02:Java · 學習它的意義?
我們學習一門語言,不應為是為了學而學,而應該知道,我為啥要學它?學了它之后我能干什么?目前市場上主流的開發有以下幾類,Java 都可以做,但是咱們講究一個合適:
-
桌面應用開發: Java 是能寫桌面程序的,但目前桌面 C# 比較流行。
-
企業級應用開發: 微服務、大型互聯網應用。(主流)
-
移動應用開發: 目前安卓、鴻蒙這些比較火,但 Java 也可以做。
-
服務器系統: 各種應用的后臺。(主流)
-
大數據開發: hadoop。(主流)
-
游戲開發: 能做,但不是主流。
0x03:Java · 核心機制 — 垃圾回收(了解)
這部分是提升階段,如果你之前學過其它的編程語言,那么對 Java 的這個機制會了解的比較深刻。對于小白而言,了解即可(應對應對面試)。
”垃圾回收“ 機制是 Java 的一個核心機制,這里的 ”垃圾回收“ 是指 清除不再使用的對象。Java 中有一個系統級的垃圾收集器,我們管它叫 Garbage Collection - GC。
每當一個對象被創建,GC 就會盯著這個對象,看它啥時候不用,一旦它后續沒人用了,GC 就自動給它干掉了。不像 C++,掃垃圾還得自己動手寫程序。
自動是挺好的,但是因為自動,所以程序員是無法對其進行精確控制和干預的。
0x04:Java · 核心機制 — 跨平臺原理(掌握)
跨平臺 泛指程序語言、軟件或硬件設備可以在多種作業系統或不同硬件架構的電腦上運作。
Java 通過 JVM(Java Virtual Machine,Java 虛擬機)以及字節碼實現跨平臺性。
Java 程序由 Javac 編譯器編譯為字節碼文件(.class
文件),JVM 中的 Java 解釋器會將字節碼文件翻譯成所在平臺上的機器碼文件,并執行對應的機器碼文件。所以 Java 程序只要一次編寫,就可到處運行(要運行的機器上安裝對應平臺的 JVM 即可):
上面提到的那么多工具(javac
、java.exe
、JVM
),你只需要安裝一個 JDK,就全部都有了。
JDK(Java Development Kit,Java 開發工具包)是 Oracle 官方提供的 Java 核心開發套件,包含開發、編譯、調試和運行 Java 程序所需的所有工具和庫,它是 Java 開發者必須安裝的基礎環境(從下一章開始我們就要配置 JDK 了)。