思維導圖學《On Java》基礎卷 + 進階卷

說明

原來讀過 《Java 編程思想(第 4 版)》,但是這個版本還是基於 Java 5 講解。由於 Java 8 做出了非常大的改進(是 Java 變化最大的版本),且截止到 2022-07-22,Java 版本都更新到 18 了……原來那本書確實需要更新了。

原作者 Bruce Eckel 又重新出版了新書:《On Java 中文版 基礎卷》《On Java 中文版 進階卷》。本文是對基礎卷和進階卷的思維導圖筆記總結,略過了部分較爲基礎的章節,並未完全詳盡書中所有知識點。

本文地址發佈在 https://github.com/LjyYano/Thinking_in_Java_MindMapping 上,GitHub 地址:鏈接,請在轉載時標明原文鏈接~

目錄

有幾個章節過於基礎,沒有放在思維導圖上:

  • 02 安裝 Java 和本書示例
  • 04 操作符
  • 05 控制流
  • 12 集合
  • 16 代碼校驗
  • 21 數組

思維導圖

導讀

我的語言之侷限,即我的世界之侷限。這句話不僅適用於我們日常讀寫的語言,也適用於編程語言。很微妙的一件事是,一門語言會悄然無息地引導你進入某種思維模式,同時遠離其他思維模式。Java 尤其如此。

如果你瞭解一門語言的不足之處和侷限性,當你遇到某個語言特性不可用時,就不會被卡住,以致無法繼續。同時,因爲你已經知曉其侷限性,所以就可以更好地進行程序設計。

Java 8 包含了許多基礎和重要的改進,而由於 Java 一直嚴格遵守自己的向後兼容性承諾,做出這些改進無疑需要花費相當多的精力。

如果一開始就將你的項目“發展”成一個有機的、進化的生命體,而不是像建造玻璃牆的摩天大樓一樣進行一次性施工,你將獲得更大的成功和更直接的反饋。

相關鏈接:

第 1 章 什麼是對象

工具已經越來越不像機器,而是越來越像思維的一部分。

所有編程語言都是一種抽象

如果我可以將問題從表象中抽取出來,那麼什麼樣的對象可以馬上解決我的問題呢?

第 3 章 一切都是對象

第 6 章 初始化和清理

第 7 章 實現隱藏

第 8 章 複用

第 9 章 多態

相關鏈接:

第 10 章 接口

任何抽象都應該由真正的需求來驅動。接口應該是在必要時用來重構的東西,而不是在任何地方都多加一個間接層級,進而帶來額外的複雜性。這種額外的複雜性影響很大,如果你讓某人在克服這種複雜性上花費時間,而他最終卻發現你添加接口只不過是爲了“以防萬一”,而非出於什麼令人信服的其他理由,他就會質疑你做過的其他所有設計。

相關鏈接:

第 11 章 內部類

第 13 章 函數式編程

lambda 表達式和方法引用遠非完美,我們要永遠承受 Java 設計者在語言誕生初期的草率決定所導致的代價。lambda 在 Java 並非一等公民。這並不意味着 Java 8 沒有大的改進,但確實意味着,像許多 Java 語法一樣,最終會有一個讓你感到不爽的臨界點。

相關鏈接:

第 14 章 流

相關鏈接:

第 15 章 異常

異常處理的優點之一,就是它使得你可以在某處集中精力處理你要解決的問題,而在另一處處理你編寫代碼產生的錯誤。

Java 堅定地強調將所有的錯誤都以異常形式報告的這一事實,正是它遠超過諸如 C++ 這類語言的長處之一。

相關鏈接:

第 17 章 文件

在非常難用的文件 I/O 編程存在多年之後,Java 終於簡化了讀寫文件的基本操作。

第 18 章 字符串

相關鏈接:

第 19 章 反射

相關鏈接:

第 20 章 泛型

在 Java 中,泛型是在這門語言發佈了幾乎 10 年後才引入的,所以向泛型的遷移問題是必須要考慮的,也對泛型的設計產生了很大沖擊。結果就是,作爲程序員的你,將因爲 Java 設計者在創建 1.0 版本時缺乏遠見而承受痛苦。

有些語言對參數化類型採用了更簡潔、影響更小的實現方法。不難想象,這樣一種語言有可能成爲 Java 的接班人,因爲它完全採用了 C++ 對待 C 的方式:站在巨人的肩膀上,並看得更遠。

進階卷 第 01 章 枚舉

進階卷 第 05 章 併發編程

進階卷 第 06 章 底層併發

結語

在不少討論中能聽到這樣的聲音:“C++ 是一門設計拙劣的語言。”我則認爲理解 C++ 和 Java 做出的各種決策有助於站在更高的位置看待問題。

如同任何人類語言一樣,Java 提供了一種表達概念的方式。如果使用得當,隨着問題變得更龐大更復雜,這種表達工具將會比別的可供選擇的語言更爲簡單、靈活。

曾幾何時,C++ 是編程語言界的“皇冠”,人們認爲會永遠如此。很多人也這麼看 Java,但由於 JVM 的緣故,Java 已經使自己可以被輕而易舉地替換掉了。現在,任何人都可以創建一門新的語言,並在短時間內使其像 Java 一樣高效運行。但在以前,對於一門新的語言來說,大部分開發時間往往花在實現正確、高效的編譯器上。

在我寫作本書時,Java 是世界上首屈一指的編程語言。然而 Java 終將老去,就像 C++ 那樣,衰退到只會在某些特殊場合用到(甚至只用於支持遺留代碼,因爲 Java 不如 C++ 和硬件結合那麼緊密)。但是 Java 無心插柳卻已蔚然成蔭的真正光輝之處是,它爲自己的替代品創造了一條非常平坦的道路,即使 Java 本身已經到了無法再進化的地步。未來的所有語言都應該從中學習:要麼創造一種可以不斷重構的文化(如 Python 和 Ruby 做到的那樣),要麼讓競爭者可以茁壯成長。


C 語言是低級語言,這會限制你的野心。這些限制使得擴展多線程庫看起來合情合理。然而 Java 更宏大的雄心壯志,使得在將低級語言模型直接照搬到高級語言的過程中,很快就暴露出了根基上的問題。這些錯配問題體現於 Thread 類中大量方法的棄用,在隨後的爲併發提供更好抽象的高級庫的浪潮中也暴露了出來。

令人驚歎的是,儘管有這麼多無法彌補的重大問題,Java 還是發展到了現在的程度。Java 的後續版本已經增加了庫以提升併發的抽象水平。事實上,我之前絕沒有想到 Java 8 會帶來如此大的提升:並行流和 CompletableFuture——這是史詩般的魔法,我還將非常驚訝地看到更多魔法的誕生。

當面臨多個可選方案時,先嚐試需要最少假設的方案。

你很容易依賴一門語言,並且陷入一種想要用該語言解決一切問題的狀態。

鏈接

由於思維導圖中的鏈接沒法截圖,按照先後順序貼在下面:

寫在最後

思維導圖是用億圖腦圖 MindMaster製作的,之前重度使用了 Xmind 和 WPS,感覺還是億圖這個思維導圖軟件比較適合我。

本文 GitHub 地址:鏈接。如果需要思維導圖原件,請在 GitHub 私信獲取~

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