欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單了解java類的初始化以及類的實例化

 更新時間:2019年07月15日 10:29:28   作者:正號先生  
這篇文章主要介紹了簡單了解java類的初始化以及類的實例化,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前言

上一篇我們知道了一個類的生命周期是:加載->驗證->準備->解析->初始化->使用->卸載。
當初始化完成以后,一個類所有的類變量(被static修飾的變量)都被賦值。但是未被static修飾的成員變量又是何時被賦值的呢?

一個類何時會被初始化

一個類何時被初始化可以分為以下幾類:

  • 1.創(chuàng)建類的實例(new)。
  • 2.訪問某個類或接口的靜態(tài)變量,或者對該靜態(tài)變量賦值。
  • 3.調(diào)用類的靜態(tài)方法。
  • 4.通過反射方式執(zhí)行以上三種行為。
  • 5.初始化子類的時候,會觸發(fā)父類的初始化。
  • 6.Java虛擬機啟動時被標明為啟動類的類。(有main方法的類)
  • 7.JDK 1.7開始提供的動態(tài)語言支持。(了解即可)

我們來說道說道第3點和第6點

我們平常在使用main方法和調(diào)用某個類的靜態(tài)方法的時候,是不是發(fā)現(xiàn),并不能直接調(diào)用靜態(tài)方法和main方法所在類的非靜態(tài)方法和非靜態(tài)變量。

可是明明不是說了在調(diào)用靜態(tài)方法和執(zhí)行main方法的時候,所在的類已經(jīng)被初始化了嗎?

是的!在上一章節(jié)我們就說,類初始化的時候會按照我們編寫代碼的順序為類變量(static修飾的變量)進行賦值。注意哦,此時這個類僅僅只有靜態(tài)變量被正確賦值了哦。

public class People{
  private static String name ="lisi";
  private int age = 18;
  
  static{
    name ="zhangsan";
  }
}

如上述代碼,在該類被初始化之后,首先按照代碼順序?qū)㈩愖兞浚ū籹tatic修飾的變量)賦值。所以name被賦值"lishi",然后再將name賦值為 "zhangsan"。此時age并沒有值,直接直接調(diào)用會報錯。

一個類何時被實例化

上一個章節(jié)中,我們明白了加載->驗證->準備->解析->初始化的具體細節(jié)。

當初始化完成后,一個類的靜態(tài)變量被正確賦值。如果這個對象是被new出來的。那么在初始化完成之后會進入實例化階段。

實例化的具體步驟為:

父類非靜態(tài)成員初始化語句(包括代碼塊,按照在類定義中的順序執(zhí)行)->父類構(gòu)造函數(shù)->子類非靜態(tài)成員初始化語句(包括代碼塊,按照在類定義中的順序執(zhí)行)->子類構(gòu)造方法()

注意哦!
如果這個類有父類不光是先實例化父類。整體流程如下:
1. 加載父類
1.1 為靜態(tài)屬性分配存儲空間并賦初始值
1.2 執(zhí)行靜態(tài)初始化塊和靜態(tài)初始化語句(從上至下)
2. 加載子類
2.1 為靜態(tài)屬性分配存儲空間
2.2 執(zhí)行靜態(tài)初始化塊和靜態(tài)初始化語句(從上至下)
3. 加載父類構(gòu)造器
3.1 為實例屬性分配存數(shù)空間并賦初始值
3.2 執(zhí)行實例初始化塊和實例初始化語句
3.3 執(zhí)行構(gòu)造器內(nèi)容
4. 加載子類構(gòu)造器
4.1 為實例屬性分配存數(shù)空間并賦初始值
4.2 執(zhí)行實例初始化塊和實例初始化語句
4.3 執(zhí)行構(gòu)造器內(nèi)容

實例化的內(nèi)存模型

到這里,我們就非常的清楚為什么在靜態(tài)方法中不能直接調(diào)用非靜態(tài)的變量,因為此時的非靜態(tài)變量并沒有被賦值。

以前我在學(xué)習(xí)的時候,new一個對象出來大家總是在說,我們初始化了這個對象,然后balabala。。。

導(dǎo)致我對于初始化和實例化里的靜態(tài)變量和非靜態(tài)變量何時被賦值一直有點模糊。new一個對象出來準確的來說是進行了初始化和實例化兩個步驟,這樣應(yīng)該就會清晰了很多。

初始化完成以后,類被存放在方法區(qū),注意哦,此時并沒有存放在堆內(nèi)存中。

只有當對象實例化進入堆內(nèi)存中以后才會對非靜態(tài)變量進行初始化賦值。

總結(jié)

這下總算吧一個類的初始化和實例化的細節(jié)搞明白了,關(guān)于文中的方法區(qū),堆內(nèi)存等內(nèi)容,下一節(jié)再具體分析。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用redis的increment()方法實現(xiàn)計數(shù)器功能案例

    使用redis的increment()方法實現(xiàn)計數(shù)器功能案例

    這篇文章主要介紹了使用redis的increment()方法實現(xiàn)計數(shù)器功能案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • java開發(fā)實現(xiàn)五子棋游戲

    java開發(fā)實現(xiàn)五子棋游戲

    這篇文章主要為大家詳細介紹了java開發(fā)實現(xiàn)五子棋游戲,具有雙人對戰(zhàn)和人機對戰(zhàn)功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • SpringBoot中@Test的介紹和使用案例

    SpringBoot中@Test的介紹和使用案例

    SpringBoot提供了方便的測試功能,可以很容易地進行單元測試和集成測試,這篇文章主要介紹了SpringBoot中@Test的介紹和使用,需要的朋友可以參考下
    2023-08-08
  • mybatis Reflector反射類的具體使用

    mybatis Reflector反射類的具體使用

    Reflector類是MyBatis反射模塊的核心,負責(zé)處理類的元數(shù)據(jù),以實現(xiàn)屬性與數(shù)據(jù)庫字段之間靈活映射的功能,本文主要介紹了mybatis Reflector反射類的具體使用,感興趣的可以了解一下
    2024-02-02
  • Java實現(xiàn)的文件上傳下載工具類完整實例【上傳文件自動命名】

    Java實現(xiàn)的文件上傳下載工具類完整實例【上傳文件自動命名】

    這篇文章主要介紹了Java實現(xiàn)的文件上傳下載工具類,結(jié)合完整實例形式分析了java針對文件上傳下載操作的相關(guān)實現(xiàn)技巧,并且針對上傳文件提供了自動命名功能以避免文件命名重復(fù),需要的朋友可以參考下
    2017-11-11
  • Spring?Security放行的接口Knife4j靜態(tài)資源的問題小結(jié)

    Spring?Security放行的接口Knife4j靜態(tài)資源的問題小結(jié)

    這篇文章主要介紹了Spring?Security使用Knife4j靜態(tài)資源的問題小結(jié),項目中使用?Spring?Security?做身份認證和授權(quán),使用?Knife4j?做接口調(diào)試,需要?Spring?Security?放行的接口記錄在?RequestMatcherConstant?類中,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • Java中包的概念和用法實戰(zhàn)案例分析

    Java中包的概念和用法實戰(zhàn)案例分析

    這篇文章主要介紹了Java中包的概念和用法,結(jié)合具體案例形式分析了java包的概念、原理、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-09-09
  • 基于 SpringBoot 實現(xiàn) MySQL 讀寫分離的問題

    基于 SpringBoot 實現(xiàn) MySQL 讀寫分離的問題

    這篇文章主要介紹了基于 SpringBoot 實現(xiàn) MySQL 讀寫分離的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Java編程接口詳細

    Java編程接口詳細

    這篇文章主要小編主要給大家講解的是Java編程中的接口,文章會從抽象類和抽象方法開始展開內(nèi)容,感興趣的小伙伴可以參考下面文章的具體內(nèi)容
    2021-10-10
  • Java OpenCV圖像處理之背景消除

    Java OpenCV圖像處理之背景消除

    GMM(高斯混合模型)是基于像素樣本統(tǒng)計信息的背景表示方法,利用像素在較長時間內(nèi)大量樣本值的概率密度等統(tǒng)計信息表示別境,然后使用統(tǒng)計差分進行目標像素判斷達到預(yù)期效果。本文將利用GMM方法實現(xiàn)圖像背景消除,需要的可以參考一下
    2022-02-02

最新評論