在運行狀態下,獲取類的屬性、方法並修改運行行為的過程。核心 API 位於 java.lang 和 java.lang.reflect 包。
提供訪問運行時類元數據、檢查和修改運行行為的方法。
| 方法 | 說明 |
|---|---|
getName() | 獲取全限定類名 |
forName(String) | 靜態加載類,返回 Class 對象 |
newInstance() | 創建實例(調用無參構造器) |
isInterface() | 判斷是否為接口 |
isArray() | 判斷是否為數組 |
isPrimitive() | 判斷是否為基本類型 |
getSuperclass() | 獲取父類 Class 引用 |
getDeclaredFields() | 獲取所有聲明字段(含私有) |
getDeclaredMethods() | 獲取所有聲明方法 |
getDeclaredConstructors() | 獲取所有聲明構造器 |
getDeclaredMethod(name, params) | 獲取指定參數類型的方法 |
Class.forName("全限定名"):運行時動態加載,執行靜態初始化。對象.getClass():編譯期已知類型。類名.class:編譯期已知,適用於基本類型(如 int.class)。Class<?> c = Class.forName("tmp.Simple");
Simple s = (Simple) c.newInstance();
s.message(); // 輸出 Hello Java
Constructor<?> con = c.getDeclaredConstructor(String.class);
con.setAccessible(true); // 破壞封裝
Simple s = (Simple) con.newInstance("參數");
Method m = c.getDeclaredMethod("cube", int.class);
m.setAccessible(true);
m.invoke(obj, 4); // 調用私有方法
查看字節碼結構:
javap -c Test // 顯示方法字節碼
javap java.lang.Object // 顯示類公共 API