4_關於類的主動使用和被動使用

LilyFlower發表於2024-03-14

關於類的主動使用和被動使用

在JVM當中表示兩個class物件是否為同一個類存在的兩個必要條件:

  • 類的完整類名必須一致,包括包名。
  • 載入這個類的ClassLoader必須相同。

換句話說,在JVM當中,即使這兩個類物件(class物件)來源同一個class檔案,被同一個虛擬機器載入,但只要載入它們的ClassLoader例項物件不同,那麼這兩個類物件也是不相等的。

對類載入器的引用

JVM必須知道一個類是由系統類載入器還是擴充套件類載入器,亦或是引導類載入器載入的。如果一個類是由系統類載入器載入的,那麼JVM會將這個類載入器的一個引用作為型別資訊的一部分儲存在方法區,當解析一個型別到另一個型別的引用時,JVM需要保證這兩個型別的類載入器是相同的。

Java程式對類的使用分為主動使用和被動使用

主動使用

  • 建立類的例項
  • 訪問某個類或介面的靜態變數,或者對靜態變數賦值
  • 呼叫類的靜態方法
  • 反射
  • 初始化一個類的子類
  • Java虛擬機器在啟動時被標明為啟動類的類
  • JDK7開始提供的動態語言支援

被動使用

除了如上的主動情況,其它使用Java類的方式都被看做是對類的被動使用,都不會導致類的初始化。

相關文章