JAVA基礎之反射

來源:互聯網
上載者:User

標籤:src   com   tor   問題   注意   image   pre   field   構造   

首先,看幾個問題

1. Class和class有什麼區別?

2. 擷取類的位元組碼(Class)的幾種方式

一個例子說明:

輸出結果:

3. 概念

  本來不想講概念,因為網上有一大堆。而且,我覺得自己也講不出什麼新鮮花樣來,但為了便於總結理解,還是說一句:

  反射簡單看來就是用一些特殊的類來表示普遍類中的一些成分(構造方法,成員屬性,成員方法)。為什嗎?因為一切

  皆對象嘛~由此就引出了Constructor,Field,Method等等類的意義和用法了。

 
4. Constructor類
表示的就是類中的構造方法,一般來說像getConstructors(),getFields(),getMethods()這種的,一看就知道是複數,表示所有的。
Constructor的用法直接來個例子

這些基本都是固定格式,基本上靠背,輸出:

5. Field類

見名知意,Field表示的就是成員屬性了。做Field類的測試時,先建立個FieldTest類:

接來下直接看用法,繼續在ClassTest裡編寫以下代碼:

輸出:

注意:getField()和getDeclaredField的區別。因為成員屬性一個是私人,一個是公有。getField()無法正常發現私人

成員,不信可以試試。而對於getDeclaredField(),如果不設定後面的setAccessible(true),即使能知道有這個Field,但也

用不了。

6. 練習案例一

學到這裡,可以做一個簡單的綜合案例了:把某個類中所有String類型屬性的值中b都換成a.

輸出:

7. Method類

表示的就是成員方法了,直接看例子:

輸出:

可以看到用法也很簡單,相對直接。接下來,比如說如果想要執行某個類中的main方法,可以參考以下案例:

這裡不用第一種方式直接調用時因為,實際情況下我們MainMethodTest這個類可能不是確定的,而是通過參數傳入的:

輸出:

8.數組的反射

這裡先說幾個概念,數組也是一種類;類型一樣,維度一樣的數組屬於同一類:

輸出:

來個問題,怎麼使用反射輸出數組裡所有元素:

這樣?:

輸出:

發現String的沒問題,int類型數組還是不行,這個就涉及到裝包拆包的基礎問題了。沒辦法,自己寫個:

輸出:

這下行了,反射的基礎用法到這就差不多了。但是很多概念沒總結出來,時間問題沒辦法。只能先學用法,後面有空

再把概念理解總結下咯。

 

 

 

 


 

JAVA基礎之反射

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.