溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

類在java中的應(yīng)用

發(fā)布時間:2020-06-28 14:57:09 來源:億速云 閱讀:84 作者:元一 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)類在java中的應(yīng)用,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

類是什么

1.JAVA中的類是具備bai某些共同特征的實du體的集合,它是一種抽象的概念;

2.用程序設(shè)計的zhi語言來說,類是dao一種抽象的數(shù)據(jù)類型,它是對所具有相同特征實體的抽象;

3.所謂對象就是真實世界中的實體,對象與實體是一一對應(yīng)的,也就是說現(xiàn)實世界中每一個實體都是一個對象,對象是一種具體的概念。

4.類是對象的集合,對象是類的實例;對象是通過new className產(chǎn)生的,用來調(diào)用類的方法;類的構(gòu)造方法 。

類什么時候加載

類的加載是通過類加載器(Classloader)完成的,它既可以是餓漢式[eagerly load](只要有其它類引用了它就加載)加載類,也可以是懶加載[lazy load](等到類初始化發(fā)生的時候才加載)。         (推薦學(xué)習(xí):java課程)

不過我相信這跟不同的JVM實現(xiàn)有關(guān),然而他又是受JLS保證的(當(dāng)有靜態(tài)初始化需求的時候才被加載)。

類什么時候初始化

加載完類后,類的初始化就會發(fā)生,意味著它會初始化所有類靜態(tài)成員,以下情況一個類被初始化:

實例通過使用new()關(guān)鍵字創(chuàng)建或者使用class.forName()反射,但它有可能導(dǎo)致ClassNotFoundException。

類的靜態(tài)方法被調(diào)用

類的靜態(tài)域被賦值

靜態(tài)域被訪問,而且它不是常量

在頂層類中執(zhí)行assert語句

反射同樣可以使類初始化,比如java.lang.reflect包下面的某些方法,JLS嚴(yán)格的說明:一個類不會被任何除以上之外的原因初始化。

類是如何被初始化的

現(xiàn)在我們知道什么時候觸發(fā)類的初始化了,他精確地寫在Java語言規(guī)范中。但了解清楚 域(fields,靜態(tài)的還是非靜態(tài)的)、塊(block靜態(tài)的還是非靜態(tài)的)、不同類(子類和超類)和不同的接口(子接口,實現(xiàn)類和超接口)的初始化順序也很重要類。

事實上很多核心Java面試題和SCJP問題都是基于這些概念,下面是類初始化的一些規(guī)則:

類從頂至底的順序初始化,所以聲明在頂部的字段的早于底部的字段初始化

超類早于子類和衍生類的初始化

如果類的初始化是由于訪問靜態(tài)域而觸發(fā),那么只有聲明靜態(tài)域的類才被初始化,而不會觸發(fā)超類的初始化或者子類的初始化即使靜態(tài)域被子類或子接口或者它的實現(xiàn)類所引用。

接口初始化不會導(dǎo)致父接口的初始化。

靜態(tài)域的初始化是在類的靜態(tài)初始化期間,非靜態(tài)域的初始化時在類的實例創(chuàng)建期間。這意味這靜態(tài)域初始化在非靜態(tài)域之前。

非靜態(tài)域通過構(gòu)造器初始化,子類在做任何初始化之前構(gòu)造器會隱含地調(diào)用父類的構(gòu)造器,他保證了非靜態(tài)或?qū)嵗兞浚ǜ割悾┏跏蓟缬谧宇?/p>

關(guān)于類在java中的應(yīng)用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI