天天看點

java反射機制原理原理功能

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,存放類的結構資訊,能夠通過相應方法取出相應的資訊:類的名字、屬性、方法、構造方法、父類和接口。

功能

  1. 在運作時判斷任意一個對象所屬的類
  2. 在運作時構造任意一個類的對象
  3. 在運作時判斷任意一個類所具有的成員變量和方法
  4. 在運作時調用任意一個對象的方法

得到該對象所屬的類:

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,也既是該方法的傳回值。