概念:顧名思義,與注釋類似注釋給人看,而注解可以給程式掃描讀取資訊
作用:
不是程式本身,可以對程式作出解析
可以被其他程式讀取
自定義
組成
元注解
@Target 作用目标
@Retention 保留區域
@Document 文檔儲存
@Inherited 子類繼承
@interface
字段
類型 + 字段名 如:String[] name()
若字段名為 value() 使用的時候可以預設不寫
若追加default預設值 使用的時候不會要求必須填寫字段值
概念
Java的反射(reflection)機制是指在程式的運作狀态中,可以構造任意一個類的對象,可以了解任意一個對象所屬的類,可以了解任意一個類的成員變量和方法,可以調用任意一個對象的屬性和方法。這種動态擷取程式資訊以及動态調用對象的功能稱為Java語言的反射機制。反射被視為動态語言的關鍵
原理
類在加載到JVM的過程中,會在JVM的方法區堆記憶體中存儲類的資訊,再在普通堆記憶體中生成類的class鏡像作為方法區類的資訊的通路入口
類加載到虛拟機的過程為:
加載 --> 連接配接 --> 初始化 --> 使用 --> 解除安裝
加載:虛拟機提供的各種加載器,預設先加載環境所需要的類檔案,如ext中的
連接配接:
驗證:檢查代碼符合虛拟機讀取解析的規範
準備:記憶體準備 正式為類變量配置設定記憶體并設定預設值,該階段在方法區堆記憶體進行
解析:虛拟機常量池的符号引用(常量名)替換為直接引用(位址)的過程
擷取
全限類名擷取
對象擷取
Class類的靜态方法 Class.forName()加載擷取
内置基本類型 類名.Type擷取
ClassLoader擷取
性能方面
因為能擷取所有類資訊,功能強大,但性能能耗卻很高
在擷取私有資訊時,使用accessible(true)方法開啟通路,性能能耗會降低