Java 基礎筆記(三):數據類型、常量與變量作用域完整指南
數據類型決定內存佈局與存儲方式。Java 分為基本類型(值語義)與引用類型(引用語義)兩大類。本文系統整理八大基本類型細節、常量定義規範、變量聲明初始化與作用域規則。
一、八大基本數據類型
| 類別 | 關鍵字 | 位數 | 取值範圍 / 說明 |
| 整數類型 | byte | 8 | -128 ~ 127,處理網絡/文件流常用 |
| short | 16 | -32,768 ~ 32,767,高字節優先 |
| int | 32 | -2,147,483,648 ~ 2,147,483,647,最常用,循環/數組下標 |
| long | 64 | 極大範圍,後綴 L/l,int 不夠用時使用 |
| 浮點類型 | float | 32 | 單精度,後綴 F/f,精度較低,大/小數值不精確 |
| double | 64 | 雙精度,默認類型,Math 函數返回類型,精度要求高首選 |
| 字符類型 | char | 16 | Unicode 編碼,單引號括起,可參與整數運算 |
| 布爾類型 | boolean | ~ | true/false,關系運算結果,控制語句條件 |
關鍵細節
- Java 無無符號整數,所有整數均為有符號(首位為符號位)
- 整數字面量默認
int;byte/short/int 參與運算自動提升至 int
- 浮點字面量默認
double;float 需顯式後綴 F/f
char 採用 UTF-16,範圍 \u0000 ~ \uFFFF
boolean 不能與整數互轉,true != 1,false != 0
二、常量定義規範
使用 final 關鍵字,聲明即賦值,命名全大寫下劃線分隔(如 MAX_CONNECTIONS)。
常量分類與表示
| 類型 | 示例 | 說明 |
| 布爾 | true / false | 不可作為整數使用 |
| 整型 | 25, -37 | 十進制 |
| 010, -015 | 八進制(前綴 0) |
| 0x10, -0X15 | 十六進制(前綴 0x/0X) |
| 1234567L | long 常量需後綴 L/l |
| 浮點 | 3.14f, 2.71F | float 後綴 f/F |
| 3.14, 2.71d | double 默認/後綴 d/D |
| 字符 | 'A', '0', '$' | 單引號,單字符 |
| 轉義字符 | \n, \t, \\, \', \" | 控制字符,含 Unicode 編碼 |
| 字符串 | "Hello", "A\nB" | 雙引號,可含轉義,同一行閉合,+ 連接 |
字符常量 vs 字符串常量
'A':char 類型,單字符
"A":String 類型,對象(非字符數組)
- C/C++ 字符串是字符數組,Java 字符串是不可變對象
三、變量定義、初始化與作用域
聲明語法
數據類型 變量名 [= 初始值] [, 變量名 [= 初始值] ...];
- 類型可為基本類型或類/接口名
- 初始化表達式類型必須兼容
- 動態初始化:可使用方法調用、其他變量、字面量
四類變量與作用域
| 類型 | 聲明位置 | 作用域 | 生命周期 |
| 成員變量 | 類中,方法外 | 整個類 | 對象創建到銷毀 |
| 局部變量 | 方法內/代碼塊內 | 所在方法/代碼塊 | 進入塊創建,退出塊銷毀 |
| 方法參數 | 方法簽名 | 整個方法/構造器 | 方法調用期間 |
| 異常參數 | catch (Exception e) | catch 塊內 | 異常處理期間 |
作用域嵌套規則
- 外層作用域對象對內層可見,內層對外層不可見
- 離開作用域,變量銷毀,值不保留;重新進入重新初始化
- Java 禁止 內層作用域聲明與外層同名變量(C/C++ 允許)
代碼示例
class Scope {
public static void main(String[] args) {
int x = 10; // main 作用域
if (x == 10) {
int y = 20; // if 塊作用域
System.out.println("x and y: " + x + " " + y); // 可見
x = y * 2; // 修改外層 x
}
// y = 100; // 編譯錯誤:y 已超出作用域
x = 15; // 正確:x 仍在作用域
}
}
最佳實踐
- 變量作用域最小化:在最近使用處聲明
- 優先使用
final 修飾不可變引用
- 避免在循環體外聲明僅循環內使用的變量
- 成員變量封裝:private + getter/setter