日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

Class類簡介

時間:2020-05-12 08:30:31 類型:JAVA
字號:    

  Class類簡介

  ??在java世界里,一切皆對象。從某種意義上來說,java有兩種對象:實例對象和Class對象。每個類的運行時的類型信息就是用Class對象表示的。它包含了與類有關(guān)的信息。其實我們的實例對象就通過Class對象來創(chuàng)建的。Java使用Class對象執(zhí)行其RTTI(運行時類型識別,Run-Time Type Identification),多態(tài)是基于RTTI實現(xiàn)的。

  ??每一個類都有一個Class對象,每當(dāng)編譯一個新類就產(chǎn)生一個Class對象,基本類型 (boolean, byte, char, short, int, long, float, and double)有Class對象,數(shù)組有Class對象,就連關(guān)鍵字void也有Class對象(void.class)。Class對象對應(yīng)著java.lang.Class類,如果說類是對象抽象和集合的話,那么Class類就是對類的抽象和集合。

  ??Class類沒有公共的構(gòu)造方法,Class對象是在類加載的時候由Java虛擬機以及通過調(diào)用類加載器中的 defineClass 方法自動構(gòu)造的,因此不能顯式地聲明一個Class對象。一個類被加載到內(nèi)存并供我們使用需要經(jīng)歷如下三個階段:

  加載,這是由類加載器(ClassLoader)執(zhí)行的。通過一個類的全限定名來獲取其定義的二進(jìn)制字節(jié)流(Class字節(jié)碼),將這個字節(jié)流所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法去的運行時數(shù)據(jù)接口,根據(jù)字節(jié)碼在java堆中生成一個代表這個類的java.lang.Class對象。

  鏈接。在鏈接階段將驗證Class文件中的字節(jié)流包含的信息是否符合當(dāng)前虛擬機的要求,為靜態(tài)域分配存儲空間并設(shè)置類變量的初始值(默認(rèn)的零值),并且如果必需的話,將常量池中的符號引用轉(zhuǎn)化為直接引用。

  初始化。到了此階段,才真正開始執(zhí)行類中定義的java程序代碼。用于執(zhí)行該類的靜態(tài)初始器和靜態(tài)初始塊,如果該類有父類的話,則優(yōu)先對其父類進(jìn)行初始化。

  ?

  ??所有的類都是在對其第一次使用時,動態(tài)加載到JVM中的(懶加載)。當(dāng)程序創(chuàng)建第一個對類的靜態(tài)成員的引用時,就會加載這個類。使用new創(chuàng)建類對象的時候也會被當(dāng)作對類的靜態(tài)成員的引用。因此java程序程序在它開始運行之前并非被完全加載,其各個類都是在必需時才加載的。這一點與許多傳統(tǒng)語言都不同。動態(tài)加載使能的行為,在諸如C++這樣的靜態(tài)加載語言中是很難或者根本不可能復(fù)制的。

  ??在類加載階段,類加載器首先檢查這個類的Class對象是否已經(jīng)被加載。如果尚未加載,默認(rèn)的類加載器就會根據(jù)類的全限定名查找.class文件。在這個類的字節(jié)碼被加載時,它們會接受驗證,以確保其沒有被破壞,并且不包含不良java代碼。一旦某個類的Class對象被載入內(nèi)存,我們就可以它來創(chuàng)建這個類的所有對象。


 

如何獲得Class對象

  有三種獲得Class對象的方式:

  Class.forName(“類的全限定名”)

  實例對象.getClass()

  類名.class (類字面常量)


<