淺談Java反射機制
什麼是反射
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。
初探
對反射的最初接觸是學習jdbc時,載入資料庫驅動時會這樣寫:Class.forName("com.mysql.jdbc.Driver"),當時似懂非懂的也不知道是什麼意思,隨著自己的不斷學習,越來越感覺反射的神奇,讓我們一起來揭開它的神秘面紗吧。
學習一個知識,自然是最先從api開始,反射涉及的類,除了Class類之外,基本上都在java.lang.reflect包裡面,常用的類有Constructor,Field,Method類等,AccessibleObject類是前面三個類的基類,主要包含設置安全性檢查等方法,下面,我們看一下reflect包的結構
可以看出,涉及的類並不多,讓我一起來看一下其中比較常用的類的用法吧
初始化
測試用例採用junit+log4j,新建一個test類,一個javabean
其中name屬性get,set方法用private修飾
User類
Test類
類
在類載入的時候,jvm會創建一個class對象
class對象是可以說是反射中最常用的,獲取class對象的方式的主要有三種
根據類名:類名.class
根據對象:對象.getClass()
根據全限定類名:Class.forName(全限定類名)
console
構造函數
構造函數是java創建對象的必經之路,所以通過反射拿到一個類的構造函數後,再去創建這個類的對象自然是易如反掌,常用的方法如下:
console
屬性
猶記得學習spring ioc之時,對未提供set方法的private屬性依然可以注入感到神奇萬分,現在看來,這神奇的根源自然是來自於java的反射,常用的方法如下:
console
方法
大家對javabean肯定不會陌生,在用框架操作javabean時,大多都是通過反射調用get,set方法Javabean進行操作,常用的方法如下:
console
總結
不難看出,Java反射中的構造函數,屬性,方法有著諸多相似之處,不僅僅是因為它們有著共同的父類AccessibleObject,基本上所有的api都有相似之處。學習的過程中死記api是最愚蠢的,找方法,理解反射的設計思路。去嘗試感悟設計思想,才是王道。
上面只是對反射的常用方法提供了示例,最好的學習方法自然是參照api,自己去實踐。紙上得來終覺淺,絕知此事要躬行。通過自己的不斷練習,體會,思考,達到融會貫通的目的。
思考
java以面向對象和封裝性著稱,但反射在java中堪稱作弊器,似乎無所不能,給人一種建了一道圍牆,下面又留了一道門的感覺,是否破壞了程序的封裝性?
筆者認為:循規蹈矩固然好,但過於注重規範反而影響程序的靈活性。Java反射給我們帶了靈活性的同時,極大的方便了我們的編程,而且反射堪稱各大框架的基礎。如此看來,顯然利大於弊,你怎麼看?
學習Java的同學注意了!!!
學習過程中遇到什麼問題或者想獲取學習資源的話,歡迎加入Java學習交流群495273252,我們一起學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 消息機制