當前位置:
首頁 > 知識 > 淺談Java反射機制

淺談Java反射機制

什麼是反射

JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。

初探

對反射的最初接觸是學習jdbc時,載入資料庫驅動時會這樣寫:Class.forName("com.mysql.jdbc.Driver"),當時似懂非懂的也不知道是什麼意思,隨著自己的不斷學習,越來越感覺反射的神奇,讓我們一起來揭開它的神秘面紗吧。

學習一個知識,自然是最先從api開始,反射涉及的類,除了Class類之外,基本上都在java.lang.reflect包裡面,常用的類有Constructor,Field,Method類等,AccessibleObject類是前面三個類的基類,主要包含設置安全性檢查等方法,下面,我們看一下reflect包的結構

淺談Java反射機制

可以看出,涉及的類並不多,讓我一起來看一下其中比較常用的類的用法吧

初始化

測試用例採用junit+log4j,新建一個test類,一個javabean

其中name屬性get,set方法用private修飾

User類

淺談Java反射機制

Test類

淺談Java反射機制

在類載入的時候,jvm會創建一個class對象

class對象是可以說是反射中最常用的,獲取class對象的方式的主要有三種

  1. 根據類名:類名.class

  2. 根據對象:對象.getClass()

  3. 根據全限定類名:Class.forName(全限定類名)

淺談Java反射機制

console

淺談Java反射機制

構造函數

構造函數是java創建對象的必經之路,所以通過反射拿到一個類的構造函數後,再去創建這個類的對象自然是易如反掌,常用的方法如下:

淺談Java反射機制

console

淺談Java反射機制

屬性

猶記得學習spring ioc之時,對未提供set方法的private屬性依然可以注入感到神奇萬分,現在看來,這神奇的根源自然是來自於java的反射,常用的方法如下:

淺談Java反射機制

console

淺談Java反射機制

方法

大家對javabean肯定不會陌生,在用框架操作javabean時,大多都是通過反射調用get,set方法Javabean進行操作,常用的方法如下:

淺談Java反射機制

console

淺談Java反射機制

總結

不難看出,Java反射中的構造函數,屬性,方法有著諸多相似之處,不僅僅是因為它們有著共同的父類AccessibleObject,基本上所有的api都有相似之處。學習的過程中死記api是最愚蠢的,找方法,理解反射的設計思路。去嘗試感悟設計思想,才是王道。

上面只是對反射的常用方法提供了示例,最好的學習方法自然是參照api,自己去實踐。紙上得來終覺淺,絕知此事要躬行。通過自己的不斷練習,體會,思考,達到融會貫通的目的。

思考

java以面向對象和封裝性著稱,但反射在java中堪稱作弊器,似乎無所不能,給人一種建了一道圍牆,下面又留了一道門的感覺,是否破壞了程序的封裝性?

筆者認為:循規蹈矩固然好,但過於注重規範反而影響程序的靈活性。Java反射給我們帶了靈活性的同時,極大的方便了我們的編程,而且反射堪稱各大框架的基礎。如此看來,顯然利大於弊,你怎麼看?


學習Java的同學注意了!!!

學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群495273252,我們一起學Java!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java團長 的精彩文章:

JVM的內存區域劃分以及垃圾回收機制詳解
優質免費在線學習網站
深入理解Java常用類——StringBuilder
Java——IO 流
Java垃圾回收機制詳解

TAG:Java團長 |

您可能感興趣

Yorda與Elika:從 AI 互動機制談共情體驗
劫持者可以繞過 Active Directory 控制機制
Hawkeye逃避機制和反調試技術分析
android 結合源碼深入剖析AsyncTask機制原理
react的更新機制
微軟鎖定機制專利刺激更多Surface Phone的傳言
Nature Communications:生化機制對異源表達基因的功能兼容性具有決定性作用
在TensorFlow+Keras環境下使用RoI池化一步步實現注意力機制
阿里開源富容器引擎 PouchContainer的network 連接機制
利用macOS High Sierra漏洞以虛擬點擊就能繞過安全機制
PHP的session的實現機制
Spring AOP 的實現機制
研究揭示亞細胞核結構nuclear speckle在mRNA出核中的功能與機制
Microsoft Teams 升級機制允許黑客執行任意文件
Filecoin挖礦機制一本通
Napoleone Ferrara博士談VEGF抗體治療眼底疾病機制的發現
Science:揭示反安慰劑效應產生機制
SpringCloud如何實現Eureka集群、HA機制?
Thomas Willis講座:機制研究發現卒中治療新靶點
一張圖看明白 Android Handler 消息機制