您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關類在java中的應用,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
類是什么
1.JAVA中的類是具備bai某些共同特征的實du體的集合,它是一種抽象的概念;
2.用程序設計的zhi語言來說,類是dao一種抽象的數據類型,它是對所具有相同特征實體的抽象;
3.所謂對象就是真實世界中的實體,對象與實體是一一對應的,也就是說現實世界中每一個實體都是一個對象,對象是一種具體的概念。
4.類是對象的集合,對象是類的實例;對象是通過new className產生的,用來調用類的方法;類的構造方法 。
類什么時候加載
類的加載是通過類加載器(Classloader)完成的,它既可以是餓漢式[eagerly load](只要有其它類引用了它就加載)加載類,也可以是懶加載[lazy load](等到類初始化發生的時候才加載)。 (推薦學習:java課程)
不過我相信這跟不同的JVM實現有關,然而他又是受JLS保證的(當有靜態初始化需求的時候才被加載)。
類什么時候初始化
加載完類后,類的初始化就會發生,意味著它會初始化所有類靜態成員,以下情況一個類被初始化:
實例通過使用new()關鍵字創建或者使用class.forName()反射,但它有可能導致ClassNotFoundException。
類的靜態方法被調用
類的靜態域被賦值
靜態域被訪問,而且它不是常量
在頂層類中執行assert語句
反射同樣可以使類初始化,比如java.lang.reflect包下面的某些方法,JLS嚴格的說明:一個類不會被任何除以上之外的原因初始化。
類是如何被初始化的
現在我們知道什么時候觸發類的初始化了,他精確地寫在Java語言規范中。但了解清楚 域(fields,靜態的還是非靜態的)、塊(block靜態的還是非靜態的)、不同類(子類和超類)和不同的接口(子接口,實現類和超接口)的初始化順序也很重要類。
事實上很多核心Java面試題和SCJP問題都是基于這些概念,下面是類初始化的一些規則:
類從頂至底的順序初始化,所以聲明在頂部的字段的早于底部的字段初始化
超類早于子類和衍生類的初始化
如果類的初始化是由于訪問靜態域而觸發,那么只有聲明靜態域的類才被初始化,而不會觸發超類的初始化或者子類的初始化即使靜態域被子類或子接口或者它的實現類所引用。
接口初始化不會導致父接口的初始化。
靜態域的初始化是在類的靜態初始化期間,非靜態域的初始化時在類的實例創建期間。這意味這靜態域初始化在非靜態域之前。
非靜態域通過構造器初始化,子類在做任何初始化之前構造器會隱含地調用父類的構造器,他保證了非靜態或實例變量(父類)初始化早于子類
關于類在java中的應用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。