1. 程式人生 > >JavaSE基礎(day22)(1)反射技術(2)Field(3)Constructor(4)Method(5)內省

JavaSE基礎(day22)(1)反射技術(2)Field(3)Constructor(4)Method(5)內省

1.反射技術 (難點 儘量掌握)
可以動態的建立物件 並且動態的獲取類中的 構造
屬性(成員變數 + get set 方法) 方法 。並且能進行動態的呼叫。

2.反射中涉及到的API
java.lang.Class 用來描述其它類型別的一個型別
java.lang.reflect.Constructor 構造型別 描述建構函式的
java.lang.reflect.Feild 描述欄位的型別
java.lang.reflect.Method 描述方法的型別
java.lang.reflect.Array 動態陣列

3.java中建立物件的方法 (補充)
3.1new 直接建立
3.2靜態工廠方法方式 (想想單例模式如何獲取物件)
3.3例項工廠方法方式 通過一個物件 來獲取另外一個物件
3.4反射
4.如何獲取到Class 物件
4.1通過相應的型別的物件 來呼叫 getClass() 方法 就可以獲取到對應的Class物件
4.2通過相應的型別 呼叫 class 欄位 就可以獲取到相應型別的物件
4.3 基本型別的 Class 物件獲取
Integer.TYPE 和 Integer.class 是不同的
4.4 使用 包名 + 類名的 方式 java.lang 中型別也沒有特權 (必須記住的)
String str = “java.util.Date”;
Class.forName(str);
注意需要處理檢查異常
5.寫一個java中的員工型別 放入一個包 com.xdl.bean 中
欄位有 String name int age double salary 要求私有 並提供get set
提供無參構造 和 帶參構造 和 toString 方法
寫一個測試程式 有一個字串 “com.xdl.bean.Emp” 來獲取Class 型別的物件
並根據 Class 物件 來建立 Emp 型別的物件 。

6.Class 型別中常用的API
Field getField(String name) 根據一個名字 獲取公開屬性的描述
Field getDeclaredField(String name ) 根據一個名字 獲取屬性的描述
// 構造相關資訊的獲取
Constructor getConstructor(引數說明) 得公開構造的說明
Constructor getDeclaredConstructor(引數說明) 得構造說明
Constructor[] getConstructors() 得到所有的公開的構造方法
// 方法相關資訊的獲取
Method getMethod(String name, Class<?>… parameterTypes)
Method[] getMethods()

7.Field 具體的操作
getName() 得到欄位對應的名字
getType() 得到欄位對應的型別
通過Field 給具體的物件賦值
賦值使用 set(具體的物件,值)
獲取值 使用 get(具體的物件)
如果要訪問私有屬性 需要使用 setAccesible(true);

遍歷Emp 型別的物件的所有屬性 如果是 salary欄位 則通過這個欄位給 Emp物件
賦值 12345678 最後驗證是否賦值成功。其它欄位列印 名字和型別即可。

8.Constructor 型別具體的操作
能不能通過 Class 型別的物件 來獲取 Emp的全參構造

9.Method 型別的具體操作
方法的修飾符 public private …
getModifiers()
方法的返回值型別
getReturnType()
方法的名字
getName()
方法的引數
getParameterTypes()
呼叫這個方法
invoke(Object obj,Object…parameters)
10.內省
10.1 javabean
是java中 符合一定規範的 可複用的java類。
需要符合以下規範
javabean 必須放在一個 包中
javabean 必須是公開的型別
javabean 必須提供無參構造
javabean 中的屬性是私有的 並且提供相應的get set 方法
boolean 型別的 get 方法 以 is開頭
一般要實現序列化介面 (物件形式的檔案讀寫 網路傳輸)
10.2 內省技術
是針對javabean 另一套 和 反射技術一樣的 獲取類資訊的API
Introspector

視訊
javaseday22-1.反射簡介
https://v.qq.com/txp/iframe/player.html?vid=z0800758vwz
javaseday22-2.java建立物件建立Class方式
https://v.qq.com/txp/iframe/player.html?vid=c0800lxh75w
javaseday22-3.Class型別中API介紹和屬性獲取
https://v.qq.com/txp/iframe/player.html?vid=p0800rsqj4e
javaseday22-4.使用反射獲取屬性構造相關資訊
https://v.qq.com/txp/iframe/player.html?vid=q0800yb8gvl
javaseday22-5.反射獲取類的構造和方法資訊
https://v.qq.com/txp/iframe/player.html?vid=s0800wyeei8
javaseday22-6.方法呼叫和javabean內省機制
https://v.qq.com/txp/iframe/player.html?vid=r08002tg2fk

程式碼
https://pan.baidu.com/s/1t0zWS2C-BOBzi8bYyqVoaA