反射的基本使用

2021-10-09 12:48:07 字數 2801 閱讀 9084

反射:就是通過class檔案物件,去使用該檔案中的成員變數,構造方法,成員方法

反射的使用:

/* 反射:就是通過class檔案物件,去使用該檔案中的成員變數,構造方法,成員方法。

一:通過反射獲取無參構造方法訪問

二:通過反射獲取有參構造方法訪問*/

//1.獲取位元組碼檔案物件

class aclass

= class.

forname

("com.user");

//2.獲取所有的公共的構造方法

constructor[

] constructors = aclass.

getconstructors()

;獲取所有的的構造方法(包括私有的)

constructor[

] constructors1 = aclass.

getdeclaredconstructors()

;//迴圈輸出

for(constructor constructor : constructors)

//3.獲取單個構造方法

返回的是無參構造方法物件

constructor constructor = aclass.

getconstructor()

;返回的是有參構造方法物件

constructor constructor1 = aclass.

getconstructor

(string.

class

, integer.

class);

//4.通過構造方法建立物件(有參括號加引數)

object object = constructor1.

newinstance

("匡浪",20

);system.out.

println

(object)

;

//獲取位元組碼物件

class aclass

= class.

forname

("com.user");

//獲取所有成為成員變數

field[

] fields = aclass.

getdeclaredfields()

;for

(field field : fields)

//通過構造方法建立物件

constructor constructor = aclass.

getconstructor()

;//獲取構造方法

object user = constructor.

newinstance()

;//建立物件

//修改單個成員變數的值

field field = aclass.

getdeclaredfield

("name");

//獲取單個屬性

field.

setaccessible

(true);

//設定私有變數必須要暴力訪問

field.

set(user,

"匡浪");

//表示把物件user的name屬性賦值

system.out.

println

(user)

;

//1.獲取位元組碼物件

class<

?> aclass = class.

forname

("com.user");

//獲取所有的方法

method[

] methods = aclass.

getmethods()

;//獲取自己的包括父親的公共方法

method[

] methods1 = aclass.

getdeclaredmethods()

;//獲取自己的所有的方法(不包括構造方法,getset方法)

for(method method : methods1)

object user = aclass.

getconstructor()

.newinstance()

;//物件

//獲取單個方法 引數一是方法名,引數2.3.4...是方法引數型別(私有方法要暴力使用)

//method method = aclass.getmethod("show", string.class);

method method = aclass.

getdeclaredmethod

("show"

, string.

class);

method.

setaccessible

(true);

//方法使用,返回方法的返回值 引數一是物件名 引數2.3.4...是方法引數值

object a = method.

invoke

(user,

"匡浪");

system.out.

println

(a);

1.在獲取私有構造方法,私有屬性變數,私有方法時一定要暴力使用

2.在獲取私有方法屬性構造方法時,方法裡面帶declared

method.setaccessible(true);

反射 reflection基本使用

反射 reflection class jvm中 用來 管理類的 類 怎樣獲取乙個類的class物件?1 類名.class 2 物件.getclass 3 class.forname 包名.類名 異常 處理 class 物件是單例的 能通過class物件取到該類中的 包 類名 父類 介面 屬性 方法...

反射的基本用法

最近看spring原始碼,突然發現有好多地方都用到了反射,特此來回顧一下 先來建立userinfo基礎類 public class userinfo private userinfo string name,integer age,string shool public userinfo strin...

反射的基本介紹

反射 通過字串的形式匯入模組,通過字串的形式去模組中尋找指定函式 字段 全域性變數等 根據使用者輸入的內容匯入模組 由以下四個內建函式提供 hasattr getattr setattr delattr,改四個函式分別用於對物件內部執行 檢查是否含有某成員 獲取成員 設定成員 刪除成員。classf...