最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單了解java類的初始化以及類的實(shí)例化

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

前言

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

一個(gè)類何時(shí)會被初始化

一個(gè)類何時(shí)被初始化可以分為以下幾類:

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

我們來說道說道第3點(diǎn)和第6點(diǎn)

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

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

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

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

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

一個(gè)類何時(shí)被實(shí)例化

上一個(gè)章節(jié)中,我們明白了加載->驗(yàn)證->準(zhǔn)備->解析->初始化的具體細(xì)節(jié)。

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

實(shí)例化的具體步驟為:

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

注意哦!
如果這個(gè)類有父類不光是先實(shí)例化父類。整體流程如下:
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í)例屬性分配存數(shù)空間并賦初始值
3.2 執(zhí)行實(shí)例初始化塊和實(shí)例初始化語句
3.3 執(zhí)行構(gòu)造器內(nèi)容
4. 加載子類構(gòu)造器
4.1 為實(shí)例屬性分配存數(shù)空間并賦初始值
4.2 執(zhí)行實(shí)例初始化塊和實(shí)例初始化語句
4.3 執(zhí)行構(gòu)造器內(nèi)容

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

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

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

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

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

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

總結(jié)

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

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

相關(guān)文章

  • java如何實(shí)現(xiàn)判斷文件的真實(shí)類型

    java如何實(shí)現(xiàn)判斷文件的真實(shí)類型

    本篇文章主要介紹了java如何實(shí)現(xiàn)判斷文件的真實(shí)類型,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • SpringBoot框架中Mybatis-plus的簡單使用操作匯總

    SpringBoot框架中Mybatis-plus的簡單使用操作匯總

    這篇文章主要介紹了SpringBoot框架中Mybatis-plus的簡單使用,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 詳解SpringMVC組件之HandlerMapping(二)

    詳解SpringMVC組件之HandlerMapping(二)

    這篇文章主要介紹了詳解SpringMVC組件之HandlerMapping(二),HandlerMapping組件是Spring?MVC核心組件,用來根據(jù)請求的request查找對應(yīng)的Handler,在Spring?MVC中,有各式各樣的Web請求,每個(gè)請求都需要一個(gè)對應(yīng)的Handler來處理,需要的朋友可以參考下
    2023-08-08
  • 解決IDEA target文件夾越來越大的問題

    解決IDEA target文件夾越來越大的問題

    這篇文章主要介紹了解決IDEA target文件夾越來越大的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • springboot新建項(xiàng)目pom.xml文件第一行報(bào)錯(cuò)的解決

    springboot新建項(xiàng)目pom.xml文件第一行報(bào)錯(cuò)的解決

    這篇文章主要介紹了springboot新建項(xiàng)目pom.xml文件第一行報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java查找文件夾下最新生成的文件的方法

    java查找文件夾下最新生成的文件的方法

    在本篇文章中我們給大家分享了關(guān)于java怎么查找文件夾下最新生成的文件的相關(guān)方法和知識點(diǎn),有需要的朋友們參考下。
    2019-07-07
  • Java多線程 Producer and Consumer設(shè)計(jì)模式

    Java多線程 Producer and Consumer設(shè)計(jì)模式

    這篇文章主要介紹了Java多線程 Producer and Consumer設(shè)計(jì)模式,producer是生產(chǎn)者的意思:指生產(chǎn)數(shù)據(jù)的線程,consumer是消費(fèi)者的意思,指的是使用數(shù)據(jù)的線程,下文圍繞Producer及Consumer展開話題,需要的朋友可以參考一下
    2021-10-10
  • 一篇超詳細(xì)的Spring Boot整合Mybatis文章

    一篇超詳細(xì)的Spring Boot整合Mybatis文章

    大家都知道springboot搭建一個(gè)spring框架只需要秒秒鐘。下面通過實(shí)例代碼給大家介紹一下springboot與mybatis的完美融合,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2021-07-07
  • 使用Java實(shí)現(xiàn)接口攔截器來監(jiān)控接口的執(zhí)行情況

    使用Java實(shí)現(xiàn)接口攔截器來監(jiān)控接口的執(zhí)行情況

    在排查問題的時(shí)候,由于沒有對接口的執(zhí)行情況,以及入?yún)⑦M(jìn)行監(jiān)控,所以排查起問題就特別費(fèi)勁,今天我們就一起來寫一個(gè)接口的攔截器來監(jiān)控接口的執(zhí)行情況吧
    2024-01-01
  • 使用Sentinel滑動窗口實(shí)現(xiàn)限流和降級

    使用Sentinel滑動窗口實(shí)現(xiàn)限流和降級

    Sentinel 是一個(gè)開源的高可用性、高擴(kuò)展性的實(shí)時(shí)流量控制框架,它可以用于保護(hù)服務(wù)穩(wěn)定性,防止系統(tǒng)因?yàn)榱髁窟^大而崩潰,這篇文章我們所介紹的是滑動窗口,它是 Sentinel 實(shí)現(xiàn)限流和降級的重要組件之一,感興趣的同學(xué)跟著小編來看看吧
    2023-09-09

最新評論

赣榆县| 竹溪县| 乌兰县| 科尔| 辉县市| 万全县| 高青县| 涞源县| 武义县| 宁南县| 师宗县| 蒙阴县| 金乡县| 确山县| 康定县| 克拉玛依市| 开鲁县| 邻水| 平塘县| 柳江县| 台东市| 托克托县| 高雄县| 吉木萨尔县| 建昌县| 连南| 桃江县| 兰溪市| 宣武区| 南溪县| 永吉县| 龙南县| 雷州市| 南汇区| 双桥区| 华宁县| 河间市| 凤台县| 牙克石市| 镇江市| 盱眙县|