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

Core Java 核心筆記(一):基本程序結構、對象與類、內存模型深度解析

     編輯:Java 綜合教學

前言:夯實基本功,構建知識大廈基石

《Core Java》是 Java 程序員案頭必備經典。本文系統整理其第一卷核心內容:基本程序設計結構、對象與類、關鍵字語義、內存模型、參數傳遞機制,並補充源碼級分析與面試高頻陷阱,作為進階基石。

一、基本程序設計結構

1.1 八大基本類型與字面量

類型位數默認值字面量示例包裝類
byte80(byte)10Byte
short160(short)1000Short
int320100, 0xFF, 0b1010Integer
long640L100L, 0xFFLLong
float320.0f1.5f, 1e-3fFloat
double640.01.5, 1e-3Double
char16'\u0000''A', '\u0041', '\n'Character
boolean~1falsetrue, falseBoolean

關鍵點:
— int 最常用,byte/short 用於大數組/文件 IO 節省內存。
— 浮點數字面量默認 double,float 必須加 F/f 後綴。
— char 實質是無符號 16 位整數,可參與算術運算。
— 除零行為:整數除零拋 ArithmeticException;浮點數除零得 Infinity/NaN,不拋異常。

1.2 變量初始化鐵律

局部變量必須顯式初始化,否則編譯報錯。成員變量自動獲得默認值。嚴禁使用未初始化的局部變量。

1.3 final 關鍵字:三重語義

  • 基本類型:值不可變(編譯期常量折疊優化)
  • 引用類型:引用不可變(指向對象固定),但對象內部狀態可變
  • 方法/類:不可覆寫/不可繼承

最佳實踐:static final 定義類常量(如 Math.PI),命名全大寫下劃線分隔。

1.4 字符串不可變性與池化機制

  • String 對象創建後內容不可修改,任何「修改」操作都產生新對象。
  • 字符串常量池:字面量 "abc" 自動入池,new String("abc") 強制創建堆對象。
  • intern() 手動入池/獲取池中引用。
  • 比較鐵律:內容比較用 equals(),地址比較用 ==。

1.5 控制流程補充

  • switch 支持類型:char, byte, short, int, Character, Byte, Short, Integer, String (Java 7+), enum。
  • case 穿透特性:無 break 繼續執行下一 case。
  • do-while 至少執行一次,適用於菜單交互等場景。

1.6 數組核心

  • 創建時自動初始化:數值 0、布爾 false、引用 null。
  • Arrays.sort() 使用雙軸快排 (基本類型) / TimSort (對象)。
  • 多維數組本質是「數組的數組」,每行長度可不一致(鋸齒數組)。

二、對象與類

2.1 類之間三大核心關系

關系UML 符號代碼體現口訣
依賴虛線箭頭方法參數/局部變量使用 B 類Use-a (A 用 B)
聚合空心菱形成員變量持有 B 類對象 (可共享)Has-a (A 有 B)
組合實心菱形成員變量持有 B 類,生命周期綁定Contains-a (A 包含 B)
繼承實心三角箭頭extendsIs-a (A 是 B)

2.2 對象創建與引用機制

Date deadline = new Date(); // 兩步驟:
// 1. new Date():堆上分配對象,調用構造器初始化,返回引用(地址)
// 2. 變量 deadline 棧上存儲該引用(地址)

核心認知:對象變量存儲的是引用(地址),而非對象本身。多個變量可指向同一對象(別名現象)。

2.3 null 引用陷阱


Date date = null;
date.toString(); // 拋 NullPointerException:null 無指向對象,無法調用方法

防禦編程:Objects.requireNonNull()、Optional、註解 @NonNull、契約式設計。

2.4 構造器鐵律

  • 與類同名、無返回類型(甚至無 void)
  • 可重載(參數列表不同)
  • 配合 new 調用
  • 無構造器時編譯器生成無參構造器(僅當類無任何構造器)
  • 子類構造器首行隱式/顯式調用父類構造器 (super())

2.5 this 關鍵字雙重語義

  1. 隱式參數:非靜態方法中代表調用該方法的對象實例。
  2. 構造器鏈調用:構造器首行 this(...) 調用本類其他構造器。

public class Employee {
    private String name;
    private double salary;
    
    public Employee(String name) { this(name, 0); } // 調用下方構造器
    public Employee(String name, double salary) {
        this.name = name;     // this 區分字段與參數
        this.salary = salary;
    }
}

2.6 靜態字段與方法:屬於類,不屬於對象

  • 靜態字段:全類共享單份拷貝,ClassName.field 訪問。
  • 靜態方法:無 this,只能訪問靜態成員。典型:Math.sqrt()、System.out (PrintStream 靜態實例)。
  • 靜態導入:import static java.lang.Math.*;

2.7 參數傳遞:Java 唯一採用「按值調用」

基本類型:傳遞值的拷貝,方法內修改不影響原值。
引用類型:傳遞引用的拷貝(地址值),方法內可修改對象內部狀態,但無法修改原引用指向。

鐵律驗證代碼


// 情況1:修改對象狀態 - 生效
public void raiseSalary(Employee e, double percent) {
    e.setSalary(e.getSalary() * (1 + percent)); // 修改對象內部字段
}
Employee harry = new Employee("Harry", 50000);
raiseSalary(harry, 0.1); // harry.salary 變為 55000 ✅

// 情況2:嘗試修改引用指向 - 無效
public void swap(Employee a, Employee b) {
    Employee temp = a;
    a = b; // 修改局部變量 a 指向
    b = temp;
}
Employee alice = new Employee("Alice", 60000);
Employee bob = new Employee("Bob", 70000);
swap(alice, bob); 
// alice 仍指向 Alice,bob 仍指向 Bob ❌
// 因為 a、b 是 harry/alice 引用的拷貝,修改拷貝不影響原引用

2.8 方法重載與簽名

  • 同名、參數列表不同(類型/個數/順序)
  • 返回類型不是簽名一部分:不能僅返回類型不同重載
  • 可變參數 Type... args 本質是數組,優先匹配固定參數

2.9 包與訪問控制

修飾符同類同包子類(異包)非子類(異包)
private✅❌❌❌
default(包私有)✅✅❌❌
protected✅✅✅❌
public✅✅✅✅

三、文檔註釋與 Javadoc

  • 類/字段/方法上方 /** ... */
  • 標簽:@param、@return、@throws、@see、@since、@deprecated
  • 生成:javadoc -d docs -sourcepath src -subpackages com.example

四、總結:核心認知清單

  1. 八大基本類型範圍、默認值、字面量後綴、包裝類對應
  2. 局部變量必須初始化,final 三重語義
  3. 字符串不可變、常量池、equals vs ==
  4. 對象變量存引用,null 調用拋 NPE
  5. 構造器規則、this 雙重語義、構造器鏈
  6. 靜態屬於類,非靜態屬於對象
  7. Java 唯一按值調用:引用傳遞的是地址拷貝,可改對象狀態,不可換引用指向
  8. 重載看參數列表,返回類型無關
  9. 四大訪問修飾符可見性矩陣

這些基石知識是理解集合、併發、JVM、框架原理的前提。建議反覆研讀、動手驗證、構建知識圖譜。

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