日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java基础教程:反射基础

發布時間:2025/6/17 java 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java基础教程:反射基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java基礎教程:反射基礎

引入反射

反射是什么

  能夠動態分析類能力的程序稱為反射。

  反射是一種很強大且復雜的機制。

Class類

  在程序運行期間,Java運行時系統始終為所有對象維護一個被稱為運行時的類型標識。這個對象追蹤著每個對象所屬的類。虛擬機利用運行時類的信息選擇相應的方法執行

  我們可以通過專門的Java類訪問這些信息。保存這些信息的類稱為Class。

根據對象獲得類信息:

MyClass myClass; ..... Class cl = myClass.getClass(); cl.getName(); //獲得類名

補充:獲得Class類的另外兩種方式

1.調用靜態方法forName獲得類名相應的Class對象。

String className = 'java.util.Date'; Class cl = Class.forName(className);

2.直接獲取

?

Class cl1 =Date.class; Class cl2 = Integer.class;

?

注意:

  虛擬機為每一個類型管理一個Class對象。因此使用==可以實現兩個類對象比較的操作

利用反射分析類的能力?

API函數舉例

  • getDeclaredFields():獲得此類對象所表示的類或接口所聲明的所有字段。
  • getDeclaredMethods():獲得此類對象所表示的類或接口所聲明的所有方法,包括公共、保護、私有但不包括繼承。
  • getDeclaredConstructors()?:返回?Constructor?對象的一個數組,這些對象反映此?Class?對象表示的類聲明的所有構造方法。
  • getName():獲得此class所表示實體的名稱。

在運行時使用反射分析對象

API函數舉例

  • setAccessible(boolean flag):為反射對象設置可訪問標志。為true使得對象的私有屬性也可以被查詢和設置。
  • getField():?返回一個?Field?對象,它反映此?Class?對象所表示的類或接口的指定公共成員字段。
  • get(Object obj):返回對象中用Field對象表示的域值。
  • set(Object obj,Object newValue):用一個新值設置Obj對象中的Field對象表示的域。

實例演示

利用反射調用任意方法

API函數說明

public Object invoke(Object?obj,Object...?args)throws IllegalAccessException,IllegalArgumentException,InvocationTargetException?
  • 對帶有指定參數的指定對象調用由此?Method?對象表示的底層方法。個別參數被自動解包,以便與基本形參相匹配,基本參數和引用參數都隨需服從方法調用轉換。
  • 如果底層方法是靜態的,那么可以忽略指定的?obj?參數。該參數可以為 null。
  • 如果底層方法所需的形參數為 0,則所提供的?args?數組長度可以為 0 或 null。
  • 如果底層方法是實例方法,則使用動態方法查找來調用它,這一點記錄在 Java Language Specification, Second Edition 的第 15.12.4.4 節中;在發生基于目標對象的運行時類型的重寫時更應該這樣做。
  • 如果底層方法是靜態的,并且尚未初始化聲明此方法的類,則會將其初始化。
  • 如果方法正常完成,則將該方法返回的值返回給調用者;如果該值為基本類型,則首先適當地將其包裝在對象中。但是,如果該值的類型為一組基本類型,則數組元素不?被包裝在對象中;換句話說,將返回基本類型的數組。如果底層方法返回類型為 void,則該調用返回 null。
參數:
obj?- 從中調用底層方法的對象
args?- 用于方法調用的參數
返回:
使用參數?args?在?obj?上指派該對象所表示方法的結果
拋出:
IllegalAccessException?- 如果此?Method?對象強制執行 Java 語言訪問控制,并且底層方法是不可訪問的。
IllegalArgumentException?- 如果該方法是實例方法,且指定對象參數不是聲明底層方法的類或接口(或其中的子類或實現程序)的實例;如果實參和形參的數量不相同;如果基本參數的解包轉換失敗;如果在解包后,無法通過方法調用轉換將參數值轉換為相應的形參類型。
InvocationTargetException?- 如果底層方法拋出異常。
NullPointerException?- 如果指定對象為 null,且該方法是一個實例方法。
ExceptionInInitializerError?- 如果由此方法引起的初始化失敗

?

轉載于:https://www.cnblogs.com/MrSaver/p/8343828.html

總結

以上是生活随笔為你收集整理的Java基础教程:反射基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。