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

Java Web 基礎強化:MyEclipse/JUnit/泛型/枚舉/反射/註解/JDK5新特性全景實戰

     編輯:Java 綜合教學

Java Web 開發基礎強化:MyEclipse 調試、JUnit 測試、泛型/枚舉/反射/可變參數/靜態導入/自動拆裝箱/JDK5 六大新特性綜合實戰

本文匯總 Java Web 開發階段必備的工具鏈、測試框架、語法進階知識,含MyEclipse 斷點調試、JUnit 4 註解驅動測試、泛型擦除/通配符/方法/類、枚舉 API/實現接口、反射操作構造器/字段/方法、JDK 5 六大新特性,代碼均可直接運行,適合系統性查漏補缺。

一、MyEclipse 核心操作與斷點調試

專案創建規範

  • 安裝路徑**無中文、無空格**
  • 工作空間**無中文、無空格**
  • 專案類型:Java Project / Web Project,選擇 JDK、勾選 Maven
  • 包命名:cn.itcast.test (域名反轉)
  • 類名:PascalCase (UserManager);方法/變量:camelCase (addUser, userName)

斷點調試 (Debug 模式) 核心流程

  1. 雙擊行號左側 → 藍色圓點 (斷點)
  2. Debug As → Java Application → 切換到 Debug 透視圖
  3. 關鍵快捷鍵:
    • F5 Step Into:進入方法內部
    • F6 Step Over:單步執行 (不進入)
    • F7 Step Return:跳出當前方法
    • F8 Resume:運行到下一斷點/結束
  4. Variables 面板觀察變量值變化;Expressions 面板監控表達式

常用快捷鍵速查

二、JUnit 4 註解驅動單元測試


public class JUnitDemo {
    @Test
    public void testAdd() {
        Calculator c = new Calculator();
        Assert.assertEquals(5, c.add(2, 3)); // 期望值, 實際值
    }
    
    @Ignore // 忽略此測試
    @Test
    public void testIgnore() { ... }
    
    @Before // 每個 @Test 前執行
    public void setUp() { System.out.println("init"); }
    
    @After // 每個 @Test 後執行
    public void tearDown() { System.out.println("cleanup"); }
    
    // 斷言常用
    Assert.assertTrue(condition);
    Assert.assertNull(obj);
    Assert.assertSame(expected, actual);
    Assert.assertArrayEquals(expectedArr, actualArr);
}

運行:右鍵方法/類 → Run As → JUnit Test。綠條 = 通過,紅條 = 失敗。

三、JDK 5 六大新特性綜合實戰

功能快捷鍵
代碼提示Alt + /
快速導包Ctrl + Shift + O
單行註釋/取消Ctrl + /
多行註釋Ctrl + Shift + /
取消多行註釋Ctrl + Shift + \
刪除當前行Ctrl + D
特性核心語法關鍵點代碼示例
泛型List list = new ArrayList<>();編譯期類型安全,**擦除**後運行期為原始類型public static void swap(T[] a, int i, int j)
枚舉enum Color { RED, GREEN }類類型,單例,可實現接口、有構造器、字段、方法Color c = Color.RED; c.name(); c.ordinal();
自動拆裝箱Integer i = 10; int n = i;編譯器插入 valueOf/intValue,**向下兼容**舊代碼行為doSomething(10); // 調用 double 版本而非 Integer
增強 forfor (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

五、枚舉 API 與進階用法


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()

七、反射應用場景

  • 框架核心:Spring IoC (反射實例化 Bean)、MyBatis (反射映射 ResultSet)、Hibernate (反射訪問字段)
  • 通用工具:JSON 序列化、對象拷貝、動態代理生成
  • 熱加載/插件系統:運行時加載類、檢測註解、調用插件方法

掌握本文全部內容,你就完成了從「會寫代碼」到「懂工具、懂測試、懂語法本質、懂反射元編程」的關鍵躍升。建議動手敲一遍反射四大操作,體會「運行時操作類元數據」的威力。

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