Class 物件功能獲取成員變數例項
Class p = Person.class;
// Field[] getFields()
// 獲取 public 修飾的成員變數
Field[] fs = p.getFields();
for (Field f : fs) {
System.out.println(f);
}
// Field getField(String name);
Field f1 = p.getField("a");
Person pe = new Person();
f1.set(pe,"哈哈");
System.out.println(pe);
// Filed[] getDeclaredFields()
// 獲取所有成員變數
Field[] fs2 = p.getDeclaredFields();
for (Field f : fs2) {
System.out.println(f);
}
// Field getDeclaredField(String name)
// 獲取指定成員變數
Field f2 = p.getDeclaredField("name");
Person pe2 = new Person();
// 暴力反射,忽略安全檢查
f2.setAccessible(true);
f2.set(pe2,"名字");
System.out.println(pe2);
Class 物件功能獲取構造方法變數例項
構造器是用來建立物件的
Class personClass = Person.class; // 構造器 (帶參) 建立物件 Constructor constructor = personClass.getConstructor(String.class, int.class); System.out.println(constructor); Object person = constructor.newInstance("張三",18); System.out.println(person); // 構造器 (空參)建立物件 Object o = personClass.newInstance(); System.out.println(o); // 獲取構造器 (public) Constructor[] c1 = personClass.getConstructors(); for (Constructor c : c1) { System.out.println(c); } // 獲取構造器 (帶參) Class[] parameterType = new Class[]{String.class, int.class}; Constructor c = personClass.getConstructor(parameterType); System.out.println("Constructor of myClass: " + c);
獲取 constructor 的相關方法和獲取成員變數的相關方法類似,但獲取帶參構造方法時記得傳遞所需引數陣列。
Class 物件獲取 Method 例項
Class personClass = Person.class;
Method eatMethod1 = personClass.getMethod("eat");
Method eatMethod2 = personClass.getMethod("eat",String.class);
Person p = new Person();
// 執行方法
eatMethod1.invoke(p);
eatMethod2.invoke(p,"飯");
- 透過反射,一旦所使用的物件和方法發生更改,我們只需要修改配置檔案即可,無需對程式碼進行更改。在大型專案中能夠提高效率。
註解 Annotation
內建註解
- Override: 檢測被該註解標註的方法是否繼承父類或介面
- Deprecated:該註解標註的內容已過時
- SuppressWarnings:壓制警告,需要傳參
自定義註解
- 格式
- 元註解
- public @interface 註解名稱{ 屬性列表(成員方法); }
- 註解本質上是一個介面,預設繼承 Annotation 介面
- 屬性:介面中可以定義的成員方法(抽象方法)
- 返回值型別:
- 基本資料型別
- 字串
- 列舉
- 註解
- 以上型別的陣列
- 返回值型別:
- 定義屬性後,使用時需要給屬性賦相應的值
- 元註解:用於描述註解的註解
- @Target() 描述註解能夠作用的位置
- @Target(value = {ElementType.TYPE,ElementType.METHOD,ElementType.FEILD}) // 作用於 成員變數,方法,類
- @Retention() 註解能被保留的階段
- @Retention(RetentionPolicy.RUNTIME) 或 SOURCE, CLASS
- @Documented 描述註解是否被抽取到 API 文件
- @Inherited 描述註解是否被繼承
- @Target() 描述註解能夠作用的位置
- 格式
本作品採用《CC 協議》,轉載必須註明作者和本文連結