久久久久久AV无码免费看大片,亚洲一区精品人人爽人人躁,国产成人片无码免费爱线观看,亚洲AV成人无码精品网站,为什么晚上搞的时候要盖被子

Class類(lèi)簡(jiǎn)介

時(shí)間:2020-05-12 08:30:31 類(lèi)型:JAVA
字號(hào):    

  Class類(lèi)簡(jiǎn)介

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

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

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

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

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

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

  ?

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

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


 

如何獲得Class對(duì)象

  有三種獲得Class對(duì)象的方式:

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

  實(shí)例對(duì)象.getClass()

  類(lèi)名.class (類(lèi)字面常量)


<