JAVA反射基礎知識整理

2021-07-26 02:29:52 字數 2948 閱讀 9909

2.1 class類

獲取class物件的三種方式:

方式一:通過object類中的getobject()方法

person p = new person();

class c = p.getclass();

方式二:通過 類名.class 獲取到位元組碼檔案物件(任意資料型別都具備乙個class靜態屬性,看上去要比第一種方式簡單)

class c2 = person.class;

方式三: 通過class類中的方法(將類名作為字串傳遞給class類中的靜態方法forname即可)。

class c3 = class.forname("person");

2.2通過反射獲取構造方法並使用

可通過class類(位元組碼物件)中提供的方法獲取構造方法:

方式一:返回乙個構造方法

no.1(一般獲取)   public constructorgetconstructor(class<?>... parametertypes) 獲取public修飾, 指定引數型別所對應的構造方法

no.2(暴力獲取)   public constructorgetdeclaredconstructor(class<?>... parametertypes) 獲取指定引數型別所對應的構造方法(包含私有的)

方式二:返回多個構造方法

no.1(一般獲取)public constructor<?> getconstructors() 獲取所有的public 修飾的構造方法

no.2(暴力獲取)  public constructor<?> getdeclaredconstructors() 獲取所有的構造方法(包含私有的)

2.2.1通過反射方式,獲取構造方法,建立物件

1. 獲取到class物件

2. 獲取指定的構造方法

3. 通過構造方法類constructor中的方法,建立物件

public t newinstance(object... initargs)

2.2.2通過反射方式,獲取私有構造方法,建立物件

獲取私有構造方法,步驟如下:

1. 獲取到class物件

2. 獲取指定的構造方法

3. 暴力訪問, 通過類constructor的setaccessible(boolean flag)方法設定訪問許可權

4. 通過構造方法類constructor中的方法,建立物件

public t newinstance(object... initargs)

2.3通過反射獲取成員變數並使用

方式一:返回乙個成員變數

no.1(一般獲取) public field getfield(string name) 獲取指定的 public修飾的變數

no.2(暴力獲取) public field getdeclaredfield(string name) 獲取指定的任意變數

方式二:返回多個構造方法

no.1(一般獲取) public field getfields() 獲取所有public 修飾的變數

no.2(暴力獲取) public field getdeclaredfields() 獲取所有的變數 (包含私有)

2.3.1通過反射,建立物件,獲取指定的成員變數,進行賦值與獲取值操作

獲取成員變數,步驟如下:

1. 獲取class物件

2. 獲取構造方法

3. 通過構造方法,建立物件obj

4. 獲取指定的成員變數(私有成員變數,通過setaccessible(boolean flag)方法暴力訪問)

5. 通過類field的方法,給指定物件的指定成員變數賦值或者獲取值

賦值:public void set(object obj, object value)

在指定物件obj中,將此 field 物件表示的成員變數設定為指定的新值

取值:public object get(object obj)

返回指定物件obj中,此 field 物件表示的成員變數的值

2.4通過反射獲取成員方法並使用

引數1: name 要查詢的方法名稱; 引數2: parametertypes 該方法的引數型別

方式一:返回乙個方法

獲取public 修飾的方法:

public method getmethod(string name, class<?>... parametertypes)

獲取任意的方法,包含私有的:

public method getdeclaredmethod(string name, class<?>... parametertypes)

方式二:返回多個構造方法

public method getmethods() 獲取本類與父類中所有public 修飾的方法

public method getdeclaredmethods() 獲取本類中所有的方法(包含私有的)

2.4.1通過反射,建立物件,呼叫指定的方法

獲取成員方法,步驟如下:

1. 獲取class物件

2. 獲取構造方法

3. 通過構造方法,建立物件

4. 獲取指定的方法

5. 執行找到的方法:

public object invoke(object obj,  object... args) 

執行指定物件obj中,當前method物件所代表的方法,方法要傳入的引數通過args指定。

2.4.2通過反射,建立物件,呼叫指定的private 方法

獲取私有成員方法,步驟如下:

1. 獲取class物件

2. 獲取構造方法

3. 通過構造方法,建立物件

4. 獲取指定的方法

5. 開啟暴力訪問

6. 執行找到的方法

public object invoke(object obj,  object... args)

執行指定物件obj中,當前method物件所代表的方法,方法要傳入的引數通過args指定。

java基礎知識整理

一。構造方法,構造 塊,靜態 塊,靜態方法的區別 public class hellob extends helloa public hellob static 構造 塊 是給所有的物件進行初始化,也就是說,所有的物件都會呼叫乙個 塊。只要物件一建立。就會呼叫這 個 塊。建構函式 是給與之對應的物件...

Java基礎知識整理2

1.public string trim 乙個字串s通過呼叫方法trim 得到乙個字串物件,該字串物件是s去掉前後空格後的字串 2.public string substring int start,int end 字串物件呼叫該方法獲得乙個當前字串的子串,該子串是從當前字串的start處擷取到en...

Java集合基礎知識整理

長度區別 陣列長度固定,集合長度可變 內容不同 陣列只能是同一型別元素,集合可以儲存不同型別元素 元素的資料型別不同 陣列可以儲存基本型別和引用型別,集合只能儲存引用型別 物件 集合繼承關係圖 是所有collextion集合類的超類,是乙個抽象類 基本功能 public static void ma...