JAVA_HOME、PATH、CLASSPATH。PascalCase、方法/變數 camelCase、常數 UPPER_SNAKE。Alt+/ 代碼補全、Ctrl+Shift+O 導入包、Ctrl+/ 單行註解、Ctrl+Shift+/ 多行註解、Ctrl+D 刪除行。Debug As → Java Application,切換至 Debug 視角。F6 (Step Over) 單步執行、F5 (Step Into) 進入方法、F7 (Step Return) 跳出方法、F8 (Resume) 執行至下一斷點/結束。
public class CalculatorTest {
@Before public void setUp() { /* 每個 @Test 前執行 */ }
@After public void tearDown() { /* 每個 @Test 後執行 */ }
@Ignore public void ignoreThis() { /* 不執行 */ }
@Test public void testAdd() {
Calculator c = new Calculator();
assertEquals(5, c.add(2, 3), "加法驗證");
}
}
右鍵方法/類 → Run As → JUnit Test,綠條 = 通過,紅條 = 失敗。
List list = new ArrayList<>(); // 編譯期類型檢查,避免 ClassCastException
// 泛型方法
public static void swap(T[] arr, int i, int j) { T t=arr[i]; arr[i]=arr[j]; arr[j]=t; }
// 泛型類
public class Box { private T value; /* getter/setter */ }
類型擦除: 執行期泛型資訊消失,List 變 List,靠編譯器插入檢查轉型碼保證安全。
enum Signal { RED, GREEN, YELLOW; }
// 進階:帶屬性、方法、介面實現
enum Color implements Printable {
RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF);
private final int rgb;
Color(int rgb) { this.rgb = rgb; }
public int getRGB() { return rgb; }
public void print() { System.out.printf("#%06X%n", rgb); }
}
常用 API:name()、ordinal()、valueOf()、values()。
import static java.lang.System.out;
import static java.util.Arrays.sort;
out.println("Hello"); sort(arr); // 直接用類名.靜態成員
Integer i = 10; // 裝箱: Integer.valueOf(10)
int n = i; // 拆箱: i.intValue()
// 向下相容:JDK 1.4 代碼在 JDK 5+ 仍按舊規則解析重載
for (String s : list) { ... } // 適用於實現 Iterable 的集合與陣列
// 底層編譯為 Iterator 循環,Map 需遍歷 entrySet()/keySet()
public static int sum(int... nums) {
int s = 0; for (int n : nums) s += n; return s;
}
sum(1,2,3); sum(new int[]{1,2,3}); // 兩種調用等價
// 限制:只能有一個,且必須在參數列表最後
| 反射類 | 對應結構 |
|---|---|
| Class | 類本身 |
| Field | 屬性 |
| Constructor | 建構子 |
| Method | 方法 |
Class c1 = Person.class;
Class c2 = new Person().getClass();
Class c3 = Class.forName("com.demo.Person"); // 最常用,支援動態類名
Class c = Class.forName("com.demo.Person");
Person p = (Person) c.newInstance(); // 需有 public 無參建構子
p.setName("Tom");
Constructor cons = c.getConstructor(String.class, int.class);
Person p = (Person) cons.newInstance("Jerry", 25);
Field f = c.getDeclaredField("name");
f.setAccessible(true); // 關鍵:暴力反射破壞封裝
f.set(p, "Mike");
Object val = f.get(p);
Method m = c.getDeclaredMethod("setName", String.class);
m.setAccessible(true);
m.invoke(p, "Alice"); // 實例方法:第一參數傳實例
// 靜態方法:
Method sm = c.getDeclaredMethod("staticMethod");
sm.invoke(null); // 第一參數傳 null
@Component、實例化 Bean、注入依賴。@Test 方法。本教程串聯 IDE 效率技巧 → Debug 調試 → JUnit 測試驅動 → JDK 5 語法糖 → 反射動態編程 完整進階路徑。反射雖強大但破壞封裝、效能較差、編譯期無檢查,原則:框架層使用、業務層避免。掌握上述核心 API 與最佳實踐,即具備閱讀主流框架源碼與自研框架的基礎能力。