本文匯總 Java Web 開發階段必備的工具鏈、測試框架、語法進階知識,含MyEclipse 斷點調試、JUnit 4 註解驅動測試、泛型擦除/通配符/方法/類、枚舉 API/實現接口、反射操作構造器/字段/方法、JDK 5 六大新特性,代碼均可直接運行,適合系統性查漏補缺。
cn.itcast.test (域名反轉)UserManager);方法/變量:camelCase (addUser, userName)Debug As → Java Application → 切換到 Debug 透視圖| 功能 | 快捷鍵 | ||
|---|---|---|---|
| 代碼提示 | Alt + / | ||
| 快速導包 | Ctrl + Shift + O | ||
| 單行註釋/取消 | Ctrl + / | ||
| 多行註釋 | Ctrl + Shift + / | ||
| 取消多行註釋 | Ctrl + Shift + \ | ||
| 刪除當前行 | Ctrl + D |
| 特性 | 核心語法 | 關鍵點 | 代碼示例 |
|---|---|---|---|
| 泛型 | List | 編譯期類型安全,**擦除**後運行期為原始類型 | public static |
| 枚舉 | enum Color { RED, GREEN } | 類類型,單例,可實現接口、有構造器、字段、方法 | Color c = Color.RED; c.name(); c.ordinal(); |
| 自動拆裝箱 | Integer i = 10; int n = i; | 編譯器插入 valueOf/intValue,**向下兼容**舊代碼行為 | doSomething(10); // 調用 double 版本而非 Integer |
| 增強 for | for (String s : list) | 語法糖,**底層 Iterator**,僅適用 Iterable/數組 | Map 需 entrySet() 或 keySet() |
| 可變參數 | void sum(int... nums) | 本質 int[],**最後一個參數**,最多一個 | sum(1,2,3); sum(new int[]{4,5}); |
| 靜態導入 | import static java.lang.Math.*; | 直接用方法/常量名,慎用避免命名衝突 | sqrt(2); PI |
List list = new ArrayList<>();
list.add("aaa"); // 編譯期檢查類型
// list.add(100); // 編譯錯誤
// 三種遍歷
for (int i=0; i it = list.iterator(); while(it.hasNext()) System.out.println(it.next());
public static void swap(T[] arr, int i, int j) {
T temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;
}
// 調用:swap(new String[]{"a","b"}, 0, 1); // 類型推斷
List list = new ArrayList<>();
List list2 = new ArrayList<>();
System.out.println(list.getClass() == list2.getClass()); // true:運行期擦除為 List
public static void reverse(T[] arr) {
for (int i=0, j=arr.length-1; i
enum Color { RED, GREEN, BLUE; }
// 基礎 API
Color c = Color.RED;
c.name(); // "RED"
c.ordinal(); // 0
Color.valueOf("GREEN"); // GREEN
Color[] all = Color.values(); // [RED, GREEN, BLUE]
// 進階:枚舉實現接口、帶參構造器、抽象方法
enum Operation {
PLUS("+") { public double apply(double x, double y) { return x + y; } },
MINUS("-") { public double apply(double x, double y) { return x - y; } };
private String symbol;
Operation(String symbol) { this.symbol = symbol; }
public abstract double apply(double x, double y);
}
// 1. 獲取 Class 對象 (三種方式)
Class> clazz = Person.class;
Class> clazz2 = new Person().getClass();
Class> clazz3 = Class.forName("cn.itcast.test.Person");
// 2. 操作無參構造器
Person p = (Person) clazz.newInstance(); // 僅限 public 無參構造
// 或
Constructor> c = clazz.getConstructor(); // 獲取 public 無參構造
Person p2 = (Person) c.newInstance();
// 3. 操作有參構造器
Constructor> c2 = clazz.getConstructor(String.class, int.class); // 參數類型
Person p3 = (Person) c2.newInstance("Tom", 25);
// 4. 操作字段 (含 private)
Field nameField = clazz.getDeclaredField("name");
nameField.setAccessible(true); // 突破 private
Person p4 = (Person) clazz.newInstance();
nameField.set(p4, "Jerry"); // p4.name = "Jerry"
Object val = nameField.get(p4); // 讀取
// 5. 操作方法 (含 private/static)
Method setName = clazz.getDeclaredMethod("setName", String.class);
setName.setAccessible(true);
setName.invoke(p4, "Mike"); // p4.setName("Mike")
// 靜態方法 invoke 第一參數傳 null
Method staticMethod = clazz.getDeclaredMethod("staticMethod");
staticMethod.invoke(null); // ClassName.staticMethod()
掌握本文全部內容,你就完成了從「會寫代碼」到「懂工具、懂測試、懂語法本質、懂反射元編程」的關鍵躍升。建議動手敲一遍反射四大操作,體會「運行時操作類元數據」的威力。