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

《Head First Java》學習筆記:對象創建、變量類型、引用機制、參數傳遞

     編輯:Java 相關知識

《Head First Java》以視覺化、腦科學驅動的學習方式著稱。本文提煉其核心知識點:對象在堆中創建、變量分類、引用本質、參數傳遞機制、默認值規則、比較操作符區別,構建 Java 基礎知識骨架。

一、對象創建與內存模型

  • new 關鍵字:在堆上分配內存,調用構造器初始化,返回引用(地址)。
  • 堆:可回收垃圾堆(GC 管理),非 C++ 風格的普通堆。所有對象實例均存於此。
  • 棧:存儲局部變量(基本類型值、引用變量),線程私有,隨方法調用進棧出棧。

二、變量兩大類型

類別包含類型存儲內容默認值
基本類型 (8種)boolean, byte, short, char, int, long, float, double直接存儲值有(0/false/0.0/\u0000)
引用類型類、介面、數組、枚舉、註解存儲對象的引用(地址指針)null

關鍵細節

  • 32.5f 必須加 f 後綴,否則視為 double 編譯報錯(可能精度損失)。
  • 基本類型大小固定(如 int 4 字節),引用類型大小固定(32位 JVM 4 字節,64位 JVM 8 字節,開啟壓縮指針則 4 字節)。

三、變量命名規則

  • 以字母、_、$ 開頭,後續可含數字。
  • 區分大小寫,myVar ≠ myvar。
  • 避開關鍵字(class, int, for...)與保留字(goto, const)。
  • 慣例:駝峰命名,類名大寫開頭,方法/變量小寫開頭,常量全大寫下劃線分隔。

四、引用變量 ≠ 對象本身

  • 引用變量:像遙控器,持有操作對象的「方法」(地址),不是容器,不存儲對象內容。
  • 多引用指向同一對象:
    Dog d1 = new Dog();
    Dog d2 = d1;  // d1、d2 指向同一 Dog 對象
    d1.name = "Max";
    System.out.println(d2.name); // 輸出 "Max"
    
  • final 引用:引用不可變(不能指向新對象),但對象內容可變。
    final Dog d = new Dog();
    d = new Dog(); // 編譯錯誤
    d.name = "Buddy"; // 合法
    
  • 數組也是對象:
    int[] nums = new int[7];        // 7 個 int 默認值 0
    Dog[] pets = new Dog[7];        // 7 個 Dog 引用,默認 null,無 Dog 實例
    

五、參數傳遞:值傳遞

Java 只有值傳遞(拷貝傳遞),無引用傳遞。

  • 基本類型參數:拷貝值,方法內修改不影響實參。
  • 引用類型參數:拷貝引用值(地址),實參與形參指向同一對象。
    • 方法內通過引用修改對象內容 → 實參可見(同一對象)。
    • 方法內將形參重新指向新對象 → 實參不變(只改了局部引用副本)。
void swap(Dog a, Dog b) {
    Dog temp = a;
    a = b;        // 只換了局部引用
    b = temp;     // 實參無影響
}

六、實例變量 vs 局部變量默認值

變量類型位置默認值備註
實例變量 (字段)堆中對象內部有(0/false/null/0.0)構造器執行前由 JVM 隱式初始化
局部變量棧幀中無必須顯式初始化後才能使用,否則編譯錯誤

七、比較操作符選擇

場景操作符/方法語義
基本類型值比較==值相等
引用指向同一對象==地址相等
對象內容/業務語義相等.equals()需類覆寫 equals 定義業務相等邏輯

掌握這些基石概念,是通往 Java 進階之路的「護城河」。《Head First Java》通過圖像、謎題、對話式敘事降低認知門檻,建議配合大量敲代碼練習,將知識內化為肌肉記憶。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved