Java關鍵字是編程語言中具有特殊含義的保留字,不能用作標識符(如變量名、類名等)。Java共有50多個關鍵字(不同版本略有差異),下面我將分類詳細介紹這些關鍵字及其使用方式。
一、數據類型相關關鍵字
1. 基本數據類型
關鍵字 | 大小 | 取值范圍 | 默認值 | 示例 |
---|---|---|---|---|
byte | 8位 | -128~127 | 0 | byte b = 100; |
short | 16位 | -32768~32767 | 0 | short s = 1000; |
int | 32位 | -231~231-1 | 0 | int i = 100000; |
long | 64位 | -2?3~2?3-1 | 0L | long l = 100000L; |
float | 32位 | IEEE 754 | 0.0f | float f = 3.14f; |
double | 64位 | IEEE 754 | 0.0d | double d = 3.14159; |
char | 16位 | \u0000~\uffff | \u0000 | char c = 'A'; |
boolean | - | true/false | false | boolean flag = true; |
2. 引用類型
關鍵字 | 用途 | 示例 |
---|---|---|
class | 定義類 | class Person {} |
interface | 定義接口 | interface Runnable {} |
enum | 定義枚舉 | enum Color {RED, GREEN} |
二、流程控制關鍵字
1. 條件語句
// if-else
if (condition) {// 代碼塊
} else if (anotherCondition) {// 代碼塊
} else {// 代碼塊
}// switch (Java 12+支持表達式形式)
switch (value) {case 1 -> System.out.println("One");case 2 -> System.out.println("Two");default -> System.out.println("Other");
}
2. 循環語句
// for循環
for (int i = 0; i < 10; i++) {// 代碼塊
}// 增強for循環
for (String item : collection) {// 代碼塊
}// while循環
while (condition) {// 代碼塊
}// do-while循環
do {// 代碼塊
} while (condition);
3. 跳轉控制
關鍵字 | 用途 | 示例 |
---|---|---|
break | 退出循環/switch | while(true) { break; } |
continue | 跳過本次循環 | for(int i=0;i<10;i++) { if(i%2==0) continue; } |
return | 方法返回值 | return x * 2; |
三、訪問控制關鍵字
關鍵字 | 類內部 | 同包 | 子類 | 其他包 | 說明 |
---|---|---|---|---|---|
public | ? | ? | ? | ? | 完全開放 |
protected | ? | ? | ? | ? | 子類可訪問 |
默認 (無) | ? | ? | ? | ? | 包級私有 |
private | ? | ? | ? | ? | 僅類內部 |
示例:
public class AccessExample {public int publicVar;protected int protectedVar;int packagePrivateVar;private int privateVar;
}
四、類與對象相關關鍵字
1. 類定義與繼承
// extends - 繼承
class Animal {}
class Dog extends Animal {}// implements - 實現接口
interface Runnable {void run();
}
class Runner implements Runnable {public void run() {}
}// abstract - 抽象類/方法
abstract class Shape {abstract void draw();
}// final - 不可繼承/不可修改
final class Constants {final double PI = 3.14159;
}
2. 對象操作
// new - 實例化對象
Object obj = new Object();// this - 當前對象引用
class Person {String name;Person(String name) {this.name = name;}
}// super - 父類引用
class Student extends Person {Student() {super("Unknown");}
}// instanceof - 類型檢查
if (obj instanceof String) {String s = (String) obj;
}
五、異常處理關鍵字
// try-catch-finally
try {// 可能拋出異常的代碼
} catch (IOException e) {// 處理特定異常System.err.println("IO錯誤: " + e.getMessage());
} catch (Exception e) {// 處理通用異常System.err.println("錯誤: " + e.getMessage());
} finally {// 總會執行的代碼System.out.println("清理資源");
}// throw - 拋出異常
if (value < 0) {throw new IllegalArgumentException("值不能為負");
}// throws - 聲明可能拋出的異常
public void readFile() throws IOException {// 方法實現
}
六、修飾符關鍵字
關鍵字 | 適用目標 | 用途 |
---|---|---|
static | 變量/方法/代碼塊 | 類級別成員 |
final | 類/方法/變量 | 不可繼承/不可重寫/不可修改 |
synchronized | 方法/代碼塊 | 線程同步 |
volatile | 變量 | 保證變量可見性 |
transient | 變量 | 不參與序列化 |
native | 方法 | 本地方法(JNI) |
strictfp | 類/方法 | 嚴格浮點計算 |
示例:
class ModifierExample {static int classVar; // 類變量final int constant = 100; // 常量synchronized void safeMethod() {} // 同步方法transient String tempData; // 不序列化native void nativeMethod(); // 本地方法strictfp double preciseCalc() { return 0.1 + 0.2; }
}
七、包與導入關鍵字
// package - 定義包
package com.example.myapp;// import - 導入類/包
import java.util.List;
import static java.lang.Math.PI; // 靜態導入
八、Java 10+新增關鍵字
1. var
(局部變量類型推斷)
var list = new ArrayList<String>(); // 推斷為ArrayList<String>
var stream = list.stream(); // 推斷為Stream<String>
2. record
(Java 16+, 數據載體類)
record Point(int x, int y) {} // 自動生成構造器、getter、equals等Point p = new Point(10, 20);
System.out.println(p.x()); // 自動生成的getter
3. sealed
(Java 17+, 密封類)
sealed interface Shape permits Circle, Rectangle, Square { /*...*/ }final class Circle implements Shape { /*...*/ }
non-sealed class Rectangle implements Shape { /*...*/ }
九、保留關鍵字(未使用)
以下關鍵字在Java中保留但未使用:
goto
(保留但不允許使用)const
(保留但未實現,用final
替代)
十、關鍵字使用最佳實踐
-
訪問控制:
- 優先使用最嚴格的訪問級別(從
private
開始) - 只有需要被繼承的方法才用
protected
- 優先使用最嚴格的訪問級別(從
-
final
使用場景:- 所有常量應該用
final
- 不被設計為繼承的類應該標記為
final
- 不會被重寫的方法應該標記為
final
- 所有常量應該用
-
異常處理:
- 不要用
try-catch
處理業務邏輯 - 不要捕獲
Exception
這種太通用的異常 - 自定義業務異常應繼承
RuntimeException
- 不要用
-
static
使用準則:- 工具方法適合聲明為
static
- 避免濫用靜態變量(特別是可變靜態變量)
- 靜態工廠方法優于構造器
- 工具方法適合聲明為
-
現代Java特性:
- Java 10+ 在局部變量中使用
var
提高可讀性 - Java 16+ 對數據載體類使用
record
- Java 17+ 使用
sealed
控制類繼承
- Java 10+ 在局部變量中使用
十一、常見問題解答
1. final
、finally
和finalize()
的區別
final
:修飾符,表示不可變finally
:異常處理塊,確保代碼執行finalize()
:Object類的方法,垃圾回收前調用(已廢棄)
2. abstract
類與interface
的區別
特性 | abstract類 | interface |
---|---|---|
多繼承 | 不支持 | 支持 |
方法實現 | 可以有 | Java 8前不能有 |
變量 | 任意類型 | 默認public static final |
構造器 | 有 | 無 |
設計目的 | 代碼復用 | 定義契約 |
3. 什么時候用static
方法?
- 方法不依賴實例狀態時
- 工具類方法
- 工廠方法
- 當方法語義上與類相關而非實例相關時
十二、關鍵字思維導圖
Java關鍵字
├── 數據類型
│ ├── 基本類型: byte, short, int, long, float, double, char, boolean
│ └── 引用類型: class, interface, enum
├── 流程控制
│ ├── 條件: if, else, switch, case, default
│ ├── 循環: for, while, do
│ └── 跳轉: break, continue, return
├── 訪問控制
│ └── public, protected, private
├── 類與對象
│ ├── 繼承: extends, implements
│ ├── 實例化: new
│ ├── 引用: this, super
│ ├── 類型檢查: instanceof
│ └── 修飾: abstract, final, static
├── 異常處理
│ └── try, catch, finally, throw, throws
├── 包管理
│ └── package, import
└── 其他├── 同步: synchronized├── 變量修飾: volatile, transient├── 本地方法: native└── 嚴格浮點: strictfp
掌握這些關鍵字及其正確用法是成為Java開發者的基礎。隨著Java版本的更新,關鍵字也在不斷增加和演變,建議定期關注新特性以充分利用現代Java的能力。