首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

《Thinking in Java》讀書筆記:第 1-3 章 核心概念深度解析

     編輯:Java 相關知識

《Thinking in Java》(第 4 版)被公認為 Java 經典必讀。本文整理前三章核心心得:對象導論、一切皆對象、操作符,重點梳理抽象、封裝、繼承、多態、內存模型、基本類型、操作符細節等基石知識,並結合實踐經驗補充說明。

第 1 章:對象導論

1.1 抽象:面向問題建模,而非面向機器

  • C 語言抽象基於計算機結構(內存、寄存器、指針)。
  • Java 抽象基於問題領域:將現實概念直接映射為對象(如「賬戶」、「訂單」),程序員擴展新類型適應問題,而非受限於機器類型。

1.2 物件導向五大基本特性

  1. 萬物皆對象:對象封裝狀態(字段)與行為(方法),可從問題域提取任意概念建模。
  2. 程序是對象集合:通過發送消息(調用方法)協作。
  3. 每個對象有自己的存儲:由現有對象組合/繼承生成新對象。
  4. 每個對象有類型:每個對象是某個類的實例。
  5. 同類對象可接收相同消息:多態——子類可替換父類。

1.3 類與對象

  • 類 = 自定義數據類型,描述同特性/行為的對象集合。
  • 面向對象三大支柱:封裝、繼承、多態。
    • 封裝:隱藏內部細節,對外暴露接口,訪問控制(public/private/protected/default)實現「隱藏實現、隔離變化」。
    • 繼承:複用現有類創建新類型,子類擁有父類非 private 成員,實現「is-a」關係。Java 單根繼承(Object 為根),利於通用接口、垃圾回收、參數傳遞。
    • 多態:向上轉型(子類引用賦給父類變量),運行時動態綁定調用具體實現(方法覆蓋)。編譯期靜態綁定(重載)vs 運行期動態綁定(覆蓋)。

1.4 代碼複用:組合 vs 繼承

  • 組合(HAS-A):靈活、耦合度低,優先選擇。
  • 繼承(IS-A):需使用父類接口、實現多態時選擇。

1.5 容器與泛型

  • JDK 5 前容器存 Object,取出需向下轉型,不安全。
  • 泛型提供編譯期類型安全,明確容器持有元素類型。

第 2 章:一切皆對象

2.1 對象存儲位置:五大區域

2.2 基本類型:固定大小,跨平台一致

區域位置特點存儲內容
寄存器CPU 內部最快,編譯器管理,程序不可控—
棧RAM速度快,生命周期確定,自動釋放基本類型值、對象引用、方法幀
堆RAM靈活,GC 管理,分配較慢所有 new 出來的對象
常量存儲代碼段/ROM只讀字面量、final 常量
非 RAM 存儲磁盤/數據庫持久化序列化對象、文件
  • 所有數值類型有符號;JDK 5 自動裝箱/拆箱簡化基本類型與包裝類轉換。
  • 高精度:BigInteger(任意精度整數)、BigDecimal(任意精度定點數,金融必用)。

2.3 作用域與生命周期

  • 花括號 {} 定義作用域,局部變量隨作用域結束銷毀。
  • 對象生命周期不受作用域限制,由 GC 管理,可能長期存活。

2.4 類、字段、方法細節

  • 字段(成員變量)有默認值:數值 0、boolean false、引用 null、char '\u0000'。
  • 局部變量無默認值,編譯器強制初始化。
  • 方法參數傳遞:值傳遞(基本類型傳值,引用類型傳引用的值/別名)。
  • static 修飾字段/方法屬於類,無需實例即可訪問;修飾內部類表示非內部類。

第 3 章:操作符

3.1 優先級與賦值

  • 優先級:括號 > 單目 > 算術 > 移位 > 關係 > 邏輯 > 三元 > 賦值。
  • 賦值:基本類型複製值;引用類型複製引用(指向同一對象)。

3.2 關係、邏輯、位、移位操作符

  • ==:基本類型比值,引用類型比地址;對象內容比較用 equals()(需重寫)。
  • 短路邏輯:&&、||,左側能決定結果則不執行右側。
  • 位操作:&、|、^、~,僅適用整數類型。
  • 移位:<<(左移補 0,×2^n)、>>(算術右移,符號位擴展,÷2^n)、>>>(邏輯右移,高位補 0)。
  • 移位位數取模:int 只看低 5 位(模 32),long 只看低 6 位(模 64)。

3.3 經典位操作技巧:& 0xFF

byte b = -4;          // 二進制補碼:11111100
int i = b & 0xFF;     // 結果:252 (00000000 00000000 00000000 11111100)

原因:byte 參與運算自動提升為 int,負數會符號擴展(高位填 1)。& 0xFF 保留低 8 位,清零高 24 位,得到無符號字節值。常用於網絡協議、圖像處理、加密算法中字節操作。

實戰補充:避坑指南

  1. 浮點數比較:絕對不用 ==,用 Math.abs(a-b) < EPSILON 或 BigDecimal。
  2. String 不可變:s1 + s2 產生新對象,循環拼接用 StringBuilder。
  3. 自動裝箱陷阱:Integer a = 1000, b = 1000; a == b → false(緩存範圍 -128~127)。比較值用 equals()。
  4. 移位運算優先級低於加減:1 << 2 + 3 = 1 << 5 = 32,非 (1<<2)+3=7。加括號!

總結

前三章奠定了 Java 程序員的思維基石:用對象建模業務、理解內存模型驅動性能決策、掌握操作符細節避免低級錯誤。建議動手敲碼驗證每個知識點,形成肌肉記憶。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型位數字節範圍/精度包裝類
boolean~1—true/falseBoolean
char162Unicode 0~65535Character
byte81-128 ~ 127Byte
short162-32768 ~ 32767Short
int324-2^31 ~ 2^31-1Integer
long648-2^63 ~ 2^63-1Long
float324IEEE 754 單精度Float
double648IEEE 754 雙精度Double
void——無返回值Void