java反射機制原理
- 原理
- 功能
第一次接觸反射,是在JDBC的驅動加載中。
JDBC連接配接基本流程:
1.加載驅動 (選擇資料庫)
寫死: new oracle.jdbc.driver.OracleDriver();
軟編碼: class.forName(“oracle.jdbc.driver.OracleDriver”)
2.擷取連接配接 (與資料庫建立連接配接)
Connection con =DriverManager.getConnection(“jdbc:oracle:thin:@伺服器位址:端口:orcl”,“使用者名”,“密碼”)
3.準備sql
4.建立處理塊 (發送執行sql的工具)
靜态處理快:Statement
預處理快:PreparedStatement
5.發送sql
6.擷取結果集
利用next(),getXxx(索引列名或别名)來分析資料
7關閉
JAVA反射機制是在運作狀态中
對于任意一個類,都能夠知道這個類的所有屬性和方法;
對于任意一個對象,都能夠調用它的任意一個方法和屬性;
這種動态擷取的資訊以及動态調用對象的方法的功能稱為java語言的反射機制。
原理
要想解剖一個類,必須先要擷取到該類的位元組碼檔案對象(class)。而解剖使用的就是Class類中的方法.是以先要擷取到每一個位元組碼檔案對應的Class類型的對象
class類 :代表一個類,是Java反射機制的起源和入口
用于擷取與類相關的各種資訊, 提供了擷取類資訊的相關方法
Class類繼承自Object類
Class類是所有類的共同的圖紙
每個類有自己的對象,同時每個類也看做是一個對象,有共同的圖紙Class,存放類的結構資訊,能夠通過相應方法取出相應的資訊:類的名字、屬性、方法、構造方法、父類和接口。
功能
- 在運作時判斷任意一個對象所屬的類
- 在運作時構造任意一個類的對象
- 在運作時判斷任意一個類所具有的成員變量和方法
- 在運作時調用任意一個對象的方法
得到該對象所屬的類:
Class ownerClass = owner.getClass()
在運作時構造一個類的對象:
Class newoneClass = Class.forName(className):
得到要構造的執行個體的Class。
Constructor cons = newoneClass.getConstructor(argsClass):得到構造器。
cons.newInstance(args):建立執行個體。
在運作時判斷一個類所具有的成員變量和方法:
Class ownerClass = owner.getClass():得到該對象的Class。
Field field = ownerClass.getField(fieldName):通過Class得到類聲明的屬性。
Object property = field.get(owner):通過對象得到該屬性的執行個體,如果這個屬性是非公有的,這裡會報IllegalAccessException。
在運作時調用一個對象的方法:
Method method = ownerClass.getMethod(methodName, argsClass):通過Method名和參數的Class數組得到要執行的Method。
method.invoke(owner, args):執行該Method,invoke方法的參數是執行這個方法的對象,和參數數組。
傳回值是Object,也既是該方法的傳回值。