#反射是啥?
反射既然有“反”,就表示它是逆向的過程。那我們先來看看正向過程是怎麼樣的。
設計一個類,類別實例化成對象,對象調方法或屬性去實作一些功能。
那反射是什麼呢?
我不知道大家是否還記得上圖,這是剛接觸java時學到的知識。我自己的理解是現在是知道1,反推到2,然後再透過2得到一些別的資訊。 (這只是我的推測,至於具體是不是,還需日後深究)
類比到現實中的場景是:
你:妈妈,你知道剪刀在哪吗? 妈妈:我那天放针线的时候好像在针线盒里看到了,你去找找有没有。针线盒在客厅的茶几上。 你:好的。
然後你從「針線」推導出了「針線盒”,再從“針線盒”中找到了“剪刀”。
我們的反射是:從類別或物件推導出Class類,然後再從Class類別中獲得類別的資訊。
更迷糊了?不急,請往下看。
找到針線盒-取得Class類別
#先開始說Class類別是什麼?
Class類別就是People類別的類,就像People類別是p的類別一樣。 Class類是p的「爺爺」。
我們可以這樣理解:java.lang.Class的實例物件是People,People的實例物件是p。我們的想法就是透過People類別或p物件取得Class類,然後再透過Class類取得People類別的信息,例如屬性,方法,建構子等等。
知道了Class類別是什麼,那我們說怎麼才能取得它。
找到Class類別有3種方法:
值得一提的是,c1、c2、c3叫做People類別的「類別類型」。好了,現在我們總結已知條件:
People:類別
p:物件
#c:類別類型
找到剪刀-取得People類別的資訊
#應用程式一:取得類別的全部方法
在取得People類別的方法中,ms是存放著People類別方法的數組,透過循環,一層層會取得它的名稱、參數類型、傳回值。
最後直接在main函數中呼叫即可
得到的部分結果如下:
#應用二:取得類別的全部屬性
#呼叫與呼叫方法類似:
#運行結果:
應用三:取得類別的建構子
建構子類似,不再贅述。
運行結果如下,兩種呼叫方式結果相同:
以上只是個別功能的列舉,更具體的可以去API文件中尋找:http:/ /tool.oschina.net/apidocs/apidoc?api=jdk-zh
反射的概念
在文章的最後,我們總結一下反射的概念,讓思想昇華一下。
反射的定義是什麼?
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類別的所有屬性和方法;對於任意一個對象,都能夠呼叫它的任意一個方法,這種動態擷取、呼叫物件方法的功能稱為java語言的反射機制。
反射存在的必要性?
「反射機制是許多java框架的基石」。
(1)在xml檔案或properties裡面寫好了配置,然後在Java類別裡面解析xml或properties裡面的內容,得到一個字串,然後用反射機制,根據這個字串獲得某個類別的Class實例,這樣就可以動態配置一些東西,不用每一次都要在程式碼裡面去new或者做其他的事情,以後要改的話直接改配置文件,程式碼維護起來就很方便了。
(2)有時候要適應某些需求,Java類別裡面不一定能直接呼叫另外的方法,這時候也可以透過反射機制來實現。
反射的缺點?
我們也能在程式碼中看到,反射的程式碼比正常呼叫的程式碼更多,效能也慢,所以應避免使用反射。這就等於如果你本來就知道剪刀在哪,就沒必要再通過針線——針線盒——剪刀這條路了。
是否使用反射的標準是啥?
如果一個功能可以不用反射完成,那麼最好就不用。
php中文網,大量的免費Java入門教學,歡迎線上學習!
以上是什麼是java反射的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于平衡二叉树(AVL树)的相关知识,AVL树本质上是带了平衡功能的二叉查找树,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Java的相关知识,其中主要整理了Stream流的概念和使用的相关问题,包括了Stream流的概念、Stream流的获取、Stream流的常用方法等等内容,下面一起来看一下,希望对大家有帮助。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能