作用: 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...