反射初體驗

2021-10-10 03:39:18 字數 2950 閱讀 6244

作用: 1,載入位元組碼檔案到記憶體中,

2.讀取位元組碼目錄下的資源檔案

inputstream getresourseasstream(路徑)

路徑,直接從位元組碼的根目錄開始尋找東西即可, 因為類載入知道位元組碼目錄!!!

分類:從上到下 指邏輯上的父–子關係

啟動類載入器:(bootstrap classloader)虛擬機器內建的載入器.

平台類載入器:(plaform classloader)負責載入jdk中的一些特殊模組

系統類載入器:(system classloader)負責載入使用者類路徑上所指定的類庫

自定義類載入:(user classloader):如有必要可以使用

全盤委託機制, 保證類只會被載入一次

獲得系統類載入器的三種方法:

class.forname(「全限定類名(包名+類名)」):主要是和配置檔案結合時一般才會使用, 靈活度最高的

類名.class:已知類名的時候用此方法,返回class物件

物件.getclass();已知物件的時候用此方法,返回class物件

注意: 不管用那種方式去獲取, 位元組碼都是唯一的, 因為類載入器有全盤委託機制

class類成員方法:

public inputstream getresourceaastream(string name); 載入某乙個資源檔案

作用: 用來操作物件用的

前提: 必須獲取該類的class物件

1.操作建構函式constructor

獲取constructor:

constructor[

] 位元組碼物件.

getconstructors()

;//獲取所有公共的構造, 返回陣列, 但是沒有太大用處

constructor[

] 位元組碼物件.

getdeclaredconstructors()

;//獲取所有的構造, 包含私有的, 但是沒有太大的用途

constructor 位元組碼物件.

getconstructor

(class ...

clazz)

;//獲取單個公共的構造,引數的意義防止過載現象

constructor 位元組碼物件.

getdeclaredconstructor

(class ...

clazz)

;//獲取單個構造,包含私有的,,引數的意義防止過載現象

使用constructor:

setaccessible

(true);

//暴力反射, 如果構造是私有的時候, 在使用前必須暴力反射

建構函式物件.

newinstance

(object.

..args)

//你獲取的構造, 有幾個引數, 傳參時引數要一一對應

位元組碼物件.

newinstance()

//要求你的無參構造被public修飾才可以使用, 這個apijdk1.8後過時了, 不推薦使用

constructor使用場景:反射 + 多型+配置檔案

反射比較靈活, 可以和配置檔案結合, 完成一些比較吊的操作

2.操作成員變數field

獲取filed:

field[

]getfields()

;//獲取所有的公共的成員變數,不常用

field[

]getdecleardfields()

;//獲取所有的成員變數, 也不常用

field getfiled

(string 成員變數名)

;//獲取單個public修飾的, 不常用

filed getdeclearedfiled

(string 成員變數名)

;//獲取單個成員變數, 包含私有的(常用)

對其賦值和獲取

setaccessible

(true

)//暴力反射, 私有的成員變數必須暴力反射才可以操作

set(要被設定的物件,值)

get(要被獲取的物件)

注意: 成員變數必須在物件身上才有意義!!!因為成員變數是在堆記憶體中才會進行初始化

3.操作成員方法method

獲取method

method[

]getmethods()

;//獲取所有的public修飾的方法, 包含繼承的,用的不多!

method[

]getdeclaredmethods()

;//獲取所有方法, 不包含繼承的, 但是包含本類私有的, 用的也不是很多!

method getmethod

(方法名, class ...

引數型別)

//獲取public修飾的單個方法

method getdeclaredmethod

(方法名, class ...

引數型別)

//獲取方法物件, 包含私有的

執行method

setaccessible

(true);

//暴力反射, 私有的成員方法必須暴力反射才可以操作

object invoke

(要執行方法的物件, 執行方法所需要的實際引數)

//如果方法有返回值型別, 則需要接受 ,如果方法沒有返回值, 不需要接受,如果沒有返回值非要接受, 則接受到null

谷歌初體驗

一直用拼音加加的我,終於在某人的 下,試用了一下谷歌輸入法,結果拼音加加徹底的從我的機器上消失了,我終於也成為了乙個喜新厭舊的人啦.先說一下谷歌比拼音加加強的地方吧.1.最吸引人的地方就是可以自動同步使用者詞庫,這樣只要是能上網的地方,我就可以更新到符合我習慣的詞庫了,打的越多就越熟練,哈哈.2.句...

it行業初體驗

作為一名程式設計師,我也說一下自己入行一段時間的體會和感受。我記得是15年12月份開始,正式入門php語言,都說php是比較簡單,比較容易入門的一門語言,所以自己就選擇了php,一開始接觸php的時候 說實話 我還是比較感興趣的,原來這就是程式設計啊,真的好神奇。所以每天都是很用心的進行學習。說度過...

移植初體驗

朱老師物聯網大講堂 學習筆記 在 porting x210 uboot samsung,拷貝了我們的 android uboot smdkv210.tar.bz2,解壓tar jxvf 然後首先要看交叉編譯工具鏈是否正確,在makefile中找,ifeq arch arm cross compile...