1. 程式人生 > >javase知識點 ----21 (理解反射機制)

javase知識點 ----21 (理解反射機制)

1、反射的概念?
   JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。

2、如何做到反射?
   當一個位元組碼檔案載入到記憶體的時候,jvm會對該位元組碼進行解剖,然後建立一個物件的Class物件,把位元組碼檔案的資訊全部都儲存到該Class物件中,我們只要獲取到Class物件,我們就可以使用位元組碼物件設定物件的屬性或者呼叫物件的方法等操作。

3、反射的作用:動態獲取類的資訊,進一步實現需要的功能 例如:Spring框架通過XML檔案描述類的基本資訊,使用反射機制動態裝配物件

4、Class在java.lang包中;其他類都位於java.lang.reflect包中;反射的使用都是從Class開始

5、Class類
獲取Class類例項的三種方式:
方式一:物件名.getClass()
方法二:Class.forName()
方法三:類名.class
   
Class類的常用方法:
getFields()    獲得類的public型別的公共屬性。
getDeclaredFields()    獲得類的所有屬性 
getField(String name)    獲得類的指定屬性
getMethods()    獲得類的public型別的方法
getMethod (String name,Class [] args)    獲得類的指定方法
getConstrutors()    獲得類的public型別的構造方法
getConstrutor(Class[] args)    獲得類的特定構造方法
newInstance()    通過類的無參構造方法建立該類的一個物件
getName()    獲得類的完整名字
getPackage()    獲取此類所屬的包
getSuperclass()    獲得此類的父類對應的Class物件

6、Constructor類
Constructor類可以通過getXXX方法獲得構造方法的基本資訊,例如:
  getName:返回構造方法的名字
  getParameterTypes:返回構造方法的引數型別
除了獲得構造方法的基本資訊,還可以建立例項
newInstance(Object... initargs) :建立例項

Constructor例項通過Class例項獲得,Class類中定義瞭如下方法
Constructor<T> getConstructor(Class... parameterTypes) :通過指定引數型別,返回構造方法例項。
Constructor[] getConstructors() :返回該類的所有構造方法例項。

7、Method類
Method類將類中的方法進行封裝,可以動態獲得方法的資訊,例如
getReturnType:獲得方法返回值型別
getName:獲得方法名字
getParameterTypes:獲得方法引數型別
除了動態獲得方法資訊外,Method還能動態呼叫某一個物件的具體方法
invoke(Object obj, Object... args) :使用obj呼叫該方法,引數為args

Method例項都是通過Class類的方法獲得
Method getMethod(String name, Class... parameterTypes) :通過指定方法名,引數型別,返回一個Method例項
Method[] getMethods() :返回該類中所有方法的Method例項


8、Field類
Field類將類的屬性進行封裝,可以獲得屬性的基本資訊、屬性的值,也可以對屬性進行賦值
getName:返回屬性的名字
getXXX:例如,getFloat返回該屬性float型別的值
setXXX:例如,setFloat為屬性賦值float型別的值

獲得Field例項,都是通過Class中的方法實現
public Field getField(String name)
通過指定Field名字,返回Field例項
注意Field的訪問許可權 (一定是public)

相關推薦

javase知識點 ----21 理解反射機制

1、反射的概念?    JAVA反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個物件,都能夠呼叫它的任意一個方法和屬性;這種動態獲取資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。 2、如何做到反射?    當一個位元組碼檔

軟體測試---私有方法的呼叫Java反射機制

1.私有構造方法如何例項化類? public class MSD { private int a; private String b; //無參構造方法 private MSD() { } //有參構造方法 private MSD(int a, Strin

javase知識點 ----12 java常用API

數學類 1、Math---在java.lang包下    被final修飾,不能被繼承    所有的方法都是靜態方法,直接通過類名就可以呼叫    有兩個靜態常量  E和PI 2、常用方法    System.out.println(Math.PI);    System.

javase知識點 ----20 多執行緒

1、程序:正在執行的程式稱作一個程序。程序負責了記憶體空間的劃分。    Windows號稱是多工的作業系統,那麼Windows是同時執行多個應用程式嗎?          從巨集觀角度:Windows確實是在同時執行多個應用程式。          從微觀角度:cpu是做了

JavaReflectJava反射機制

在我們做專案時有時為了優化開發效率通常會使用一些第三方框架,這些框架有網路請求、圖片處理、json解析、註解框架等等,尤其在我們想簡化程式碼提高開發效率時就會想到使用第三方的註解框架,比較流行的有butterknife、annotations、xutils等,在

php laravel實現依賴注入原理反射機制

在使用laravel的時候,可以看到大量地使用了依賴注入。比如控制器中的HttpRequest物件,各種Model的實現類等等。這種實現方式的好處在於不需要再方法中頻繁地new某些例項,實現模組的解耦。 依賴注入使用PHP反射API實現 反射機制被多種語言使用,用來獲取類、例項物件、方法

C#中使用typeof關鍵字和GetType()獲取類的內部結構反射機制

一、問題描述 java有反射機制,C#也有反射機制,在C#中typeof關鍵字用於獲取型別的System.Type物件,該物件的GetMethods()方法可以得到型別中定義的方法物件的計集合,呼叫方法集合中每個方法物件的GetParameters()可以得到每個方法的引數

GreenDao 2.1.0 反射機制 初步使用

GreenDao (2.1.0 反射機制) 初步使用 參考文件: 史上最高效的ORM方案——GreenDao3.0詳解 GreenDao的簡單使用說明(二)單表的增,刪,改,查 GreenDao 別人總結匯總 greenDAO講義(二):資料庫查詢篇 G

javase知識點 ----13 集合

1、什麼是集合?儲存物件的容器,面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,儲存物件,集合是儲存物件最常用的一種方式。 2、集合與陣列的區別    1、陣列和集合類都是容器    2、陣列長度是固定的,集合長度是可變的。     3、陣列中可以儲存

APP利用token機制進行身份認證理解token機制+簡單Java程式碼實現

什麼是token token的意思是令牌,想象一下用過的qq令牌,是來自(騰訊)服務端生成的一串字元,作為客戶端(我們自己)進行請求的一個標識。比如說:改qq密碼。而這裡我們是自己開發App,我們的使用者用token請求登入,我們對他進行身份認證。 當用戶第一

Python -- 其他知識點垃圾回收機制

垃圾回收機制(Garbage collection) 一、小整數物件池 整數在程式中的使用非常廣泛,Python為了優化速度,使用了小整數物件池, 避免為整數頻繁申請和銷燬記憶體空間。 Python 對小整數的定義是 [-5, 257) 這些整數物件是提前建立好的,不會

Java基礎-高階特性-簡單總結I/O和反射機制

    Java中按照流向分,分為輸入流和輸出流,按照處理資料單元分,分為字元流和位元組流。這個總結開始會簡單寫一點方法,然後會寫一下常用模板,套用就好了。File類的常用方法:方法說明boolean exists( )測試檔案是否存在String getAbsolutePa

j2se學習中的一些零碎知識點1內容有些零散

方法 封裝 對象 變量 繼承 1、java編譯和運行階段發生的事情,如下圖所示:- 編寫的java源文件,通過java編譯器編譯生成以.class結尾的字節碼文件(字節碼並不是二進制),生成的字節碼文件通過類裝載器裝載進java虛擬機中,再通過java虛擬機運行轉化成二進制文件與底層的操

Calendar練習14.21第一階段基礎

14.21_常見物件(如何獲取任意年份是平年還是閏年)(掌握) 程式碼實現: package Test; import java.util.Calendar; import java.util.Scanner; /* A:案例演示 需求:鍵盤錄入任意一個年份,判斷該年是

罪犯轉移滑動視窗機制

C市現在要轉移一批罪犯到D市,C市有n名罪犯,按照入獄時間有順序,另外每個罪犯有一個罪行值,值越大罪越重。現在為了方便管理,市長決定轉移入獄時間連續的c名犯人,同時要求轉移犯人的罪行值之和不超過t,問有多少種選擇的方式(一組測試用例可能包含多組資料,請注意處理)? 這個題目可以先把連續的c

梳理Python 框架之中介軟體詳解用途和機制

什麼是中介軟體? 中介軟體是一個Python程式設計師用來處理Django的請求和響應的框架級別的鉤子,它是一個輕量,低級別的外掛系統,用於全域性範圍內改變Django的輸入,輸出。每個中介軟體元件都負責做一些特定的功能。 說的直白一點是中介軟體就是幫我們程式設計

Linux使用者空間與核心空間理解高階記憶體

Linux 作業系統和驅動程式執行在核心空間,應用程式執行在使用者空間,兩者不能簡單地使用指標傳遞資料,因為Linux使用的虛擬記憶體機制,使用者空間的資料可能被換出,當核心空間使用使用者空間指標時,對應的資料可能不在記憶體中。 Linux核心地址對映模型 x86 CPU

Linux核心中斷引入使用者空間非同步通知機制

當linux核心空間發生中斷後怎麼使使用者空間的應用程式執行相應的函式呢,當晶片有資料到來時核心會產生一箇中斷,但是怎樣通知應用程式來取資料,以前這個問題一直困擾我很長時間,後來發現linux中有非同步通知機制,在使用者程式中用signal註冊一個響應SIGIO訊號的回撥函式,然後在驅動程式中向該程

計算機作業系統知識點總結前3章

第一章 作業系統引論1、作業系統是什麼?作業系統為使用者完成所有“硬體相關,應用無關“的工作,以給使用者方便、高效、安全的使用環境1.1、定義:   作業系統是一個大型的程式系統,它負責計算機的全部軟、硬體資源的分配、排程工作,控制並協調多個任務的活動,實現資訊的存取和保護。

SpringBoot專欄-配置檔案終結篇_知識點彙總第四講

配置檔案YML SpringBoot使用一個全域性的配置檔案,配置檔名是固定的;  application.properties  、application.yml 配置檔案的作用:修改SpringBoot自動配置的預設值;SpringBoot在底層都給我們自動配