Java反射-class類

除了int等基本類型外,Java的其他類型全部都是class(包括interface)。例如:

  • String
  • Object
  • Runnable
  • Exception
  • ...

class是由JVM在執行過程中動態加載的。JVM在第一次讀取到一種class類型時,將其加載進內存。

每加載一種class,JVM就爲其創建一個Class類型的實例,並關聯起來。注意:這裏的Class類型是一個名叫Classclass。它長這樣:

public final class Class {
    private Class() {}
}

String類爲例,當JVM加載String類時,它首先讀取String.class文件到內存,然後,爲String類創建一個Class實例並關聯起來:

Class cls = new Class(String);

一個Class實例包含了該class的所有完整信息:

┌───────────────────────────┐
│      Class Instance       │──────> String
├───────────────────────────┤
│name = "java.lang.String"  │
├───────────────────────────┤
│package = "java.lang"      │
├───────────────────────────┤
│super = "java.lang.Object" │
├───────────────────────────┤
│interface = CharSequence...│
├───────────────────────────┤
│field = value[],hash,...   │
├───────────────────────────┤
│method = indexOf()...      │
└───────────────────────────┘

由於JVM爲每個加載的class創建了對應的Class實例,並在實例中保存了該class的所有信息,

包括類名、包名、父類、實現的接口、所有方法、字段等,

因此,如果獲取了某個Class實例,我們就可以通過這個Class實例獲取到該實例對應的class的所有信息。

這種通過Class實例獲取class信息的方法稱爲反射(Reflection)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章