一、 通過反射調用類中的方法
在正常情況下,得到類的對象後,我們就可以直接調用類中的方法了,如果要想調用的話,則肯定必須清楚地知道要調用的方法是什麼,之後通過class類中的getmethod方法,可得到method對象。
當擷取到method對象後,可以通過該對象來執行方法,但是在方法調用的時候,因為會牽扯到方法中參數的問題,是以通過getmethod()取得的時候,必須設定好參數類型。
我們調用saychina()方法,此方法中沒有任何參數。
執行調用的方法,需通過method的invoke方法來實作:
示例1:(調用無參的方法)
我們在person.java 類中定義了一個無參方法saychina和一個有參數的方法sayhello,接下來,我們調用無參數的方法:
輸出: 作者:沉緣,國籍:china
可以看出,通過上述反射的方式,我們能夠順利的調用person類中的方法。 那思考下,如果我們要調用含有參數的方法sayhello,該如何做呢?
可以想象,如果方法裡存在了參數,則必須設定參數的類型及内容。
輸出: 沉緣,你好!我今年:25歲了!
二、 通過反射調用類中的setter及getter方法
setter和getter方法是通路類屬性的标準方法,如果一個類中的屬性被封裝,則必須通過setter及getter方法設設定和取得,實際上此方法的操作之是以要這樣規定,主要是由于反射機制可以給予支援。
通過反射可以調用setter及getter方法。
三、 通過反射調用屬性
如果假設要操作一個類中的屬性,則也可以通過field完成,而不必麻煩的通過setter和getter。class類中,擷取類中field的方法:
1) 得到類中公共屬性
2)得到本類屬性
而在field類中,提供了擷取屬性内容及設定屬性内容的方法:
1) 擷取屬性内容
2) 設定屬性内容
還有一點需要注意,通路類中的私有屬性時,必須要讓該屬性對外可見:
該方法繼承自field的父類:
java.lang.reflect
隻要把該方法的參數内容設定為true即可。
輸出:
姓名:沉緣
年齡:25
可見,操作屬性,未必需要setter和getter方法的支援,但是,為了保證程式的安全性,最好還是通過setter和getter方法對屬性進行操作。
四、 通過反射操作數組
反射機制不光能用在類中,也可以應用在任意的引用資料類型上,當然,這就包含了數組,數組使用array類完成。
class類中存在以下一個方法:
array類中得到數組指定下标的内容:
array類中修改内容:
array類中開辟新的數組:
取得數組資訊并修改内容:
輸出:
類型:int
長度:3
第一個内容:1
第一個内容:6
數組修改的過程,實際上就是建立一個新的數組的過程,是以要把舊的數組内容拷貝到新的數組中去。
nt數組的長度是:5
1、2、3、0、0、
-------------------------
java.lang.string數組的長度是:8
chenyuan、wuqing、lengxue、null、null、null、null、null、