java 反射知識點整理

2021-07-26 07:02:49 字數 2948 閱讀 7546

1.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");

1.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() 獲取所有的構造方法(包含私有的)

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

1. 獲取到class物件

2. 獲取指定的構造方法

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

public t newinstance(object... initargs)

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

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

1. 獲取到class物件

2. 獲取指定的構造方法

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

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

public t newinstance(object... initargs)

1.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() 獲取所有的變數 (包含私有)

1.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 物件表示的成員變數的值

1.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() 獲取本類中所有的方法(包含私有的)

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

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

1. 獲取class物件

2. 獲取構造方法

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

4. 獲取指定的方法

5. 執行找到的方法:

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

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

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

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

1. 獲取class物件

2. 獲取構造方法

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

4. 獲取指定的方法

5. 開啟暴力訪問

6. 執行找到的方法

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

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

知識點整理

一 標準庫容器和演算法 1.順序容器 與前面類似 2.關聯容器 map和multimap 元素包含key 鍵 和值 value 兩部分 按照鍵對元素排序 map不允許重複元素出現,但multimap可以 set和multliset 是包含已排序物件的關聯容器 只是單純的鍵的集合 set不允許重複鍵出...

知識點整理

一 標準庫容器和演算法 1.順序容器 與前面類似 2.關聯容器 map和multimap 元素包含key 鍵 和值 value 兩部分 按照鍵對元素排序 map不允許重複元素出現,但multimap可以 set和multliset 是包含已排序物件的關聯容器 只是單純的鍵的集合 set不允許重複鍵出...

知識點整理

一 狀態控制碼 code,control flag 標誌位欄位 u a p r s f 佔6位元。各 位元的含義如下 ack 確認位元 acknowledge 只有當ack 1時確認號字段才有效,代表這個封包為確認封包。當ack 0時,確認號無效。psh push function 若為1時,代表要...