“嗨,阿米戈!”
“現在是重頭戲了。我們將熟悉 Class 類並接觸反射。
正如您可能已經意識到的那樣,Java 中的一切都是對象。對象需要什麼?每個對象定義了什麼這是怎麼回事?”
“一類!”
“對!幹得好。每個對像都有一個類。但是回到對象......有些對象完全包含一個實體,而其他對像只是幫助管理它。”
“後一種類型包括FileOutputStream和Thread。當您創建Thread對象時,不會創建新線程。線程是在調用 start() 方法後由 Java 虛擬機創建的。該對像只是幫助管理進程。”
“與FileOutputStream相同:文件存儲在磁盤上,操作系統管理存儲和訪問。但我們可以通過 File 對象與它交互,再次借助 Java 虛擬機。”
“是的,我已經明白了。”
“所以,有一個特殊的類,叫做Class,用於與類進行交互。”
“這不難猜。”
“是的。每次 Java 虛擬機將一個新類加載到內存中時,它都會創建一個 Class 對象,您可以使用它來獲取有關加載類的特定信息。”
“每個類和對像都與一個 «類對象»相關聯。”
例子 | 描述 |
---|---|
|
獲取 Integer 類的 Class 對象。 |
|
獲取 int 類的 Class 對象。 |
|
獲取 String 對象的 Class 對象。 |
|
獲取 Object 對象的 Class 對象。 |
“哇!真有趣!”
“你還記得類這個詞在Java中是關鍵字,不能用作變量名嗎?”
“哦,是的,我知道,我知道。我只是忘記了。”
“您是否已經在某處使用了 Class 對象?”
“是的,我們在編寫自己的 equals 方法實現時使用了它。”
“是的,您可以使用 getClass() 方法來測試對像是否具有相同的類。”
“你能用這個東西做什麼?”
“好吧,很多事情:”
Java代碼 | 描述 |
---|---|
|
獲取類名。 |
|
按名稱獲取類。 |
|
比較對象的類。 |
“有趣,但沒有我想像的那麼酷。”
“要酷嗎?還有倒影, 倒影超酷。”
“什麼是反射?”
"反射是一個類獲取自身信息的能力。Java 有特殊的類: Field和Method,它們類似於類的Class類。就像Class對象讓你獲得一個類的信息一樣,Field 對象提供一個字段的信息,並且 Method 對象提供有關方法的信息。看看你可以用它們做什麼:“
Java代碼 | 描述 |
---|---|
|
獲取 List 類接口的 Class 對象列表 |
|
獲取String類的父類的Class對象 |
|
獲取 List 類的方法列表 |
|
創建一個新的字符串 |
|
獲取 String 類的 length 方法並在 String 上調用它 |
“哇!那真是太酷了!”
GO TO FULL VERSION