日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

类的初始化顺序详解

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 类的初始化顺序详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

先聲明一個常識,類域和局部變量初始化的差異如下,
局部變量不初始化會報錯:

類中屬性(也稱域)不賦初值,默認為0,如果是引用默認為空。


正題

一、類中屬性按照定義的順序初始化

我們聲明一個Child類,擁有兩個構造方法:

我們在Main類中創建Child的兩個對象:

輸出結果:

結論:就算類中屬性散亂定義在不同地方,初始化也會嚴格按照先后順序執行。

二、屬性的自初始化先于構造方法初始化

我們知道,構造方法的主要作用在于初始化類中的成員變量,那么它到底何時執行呢?
在這里,我們在構造函數里將child2引用指向了另一個對象:

輸出結果如下:

我們看到,構造函數方法是后被調用的。
結論:構造函數的初始化晚于成員變量自初始化。

三、靜態塊和靜態變量優先

靜態方法又被稱為類方法,靜態屬性被稱為類域,總是最優先初始化。
靜態方法初始化也有兩種方法:

  • 直接初始化

    輸出結果:

  • 采用靜態塊統一初始化

    輸出結果:

  • 兩種方法效果一樣。但是,注意如果你靜態塊初始,你一定不能這么做:

    這樣做你是訪問不了靜態屬性的。
    你可以這么理解:靜態塊其實相當于一個屬于靜態屬性的初始化函數,你就算在里面定義了變量,作用周期也括號范圍內。所以,你的正確做法是:在外面定義好靜態類型的引用而統一在靜態塊中初始化。

    結論:一個類中初始化順序是:靜態->類屬性->構造函數。

    四、繼承關系中的初始化順序

    我們增加一個Parent類:

    然后讓Child繼承Paret類,并給Child增加一個靜態塊:

    使用Main類調用Child:

    結果:

    我們可以看到:Parent和Child的靜態塊先被調用,之后按照先父類后子類的順序進行了初始化,而且靜態屬性只初始化一次
    結論:擁有繼承關系時,先是從父類到子類初始化靜態屬性,之后再是從父類到子類初始化非靜態屬性。


    總結

  • 單個類中初始化順序:靜態屬性->非靜態屬性->構造函數
  • 繼承時初始化順序:先從父類到子類初始化靜態屬性,再從父類到子類進行非靜態初始工作。
  • 靜態屬性都只初始化一次。
  • 轉載于:https://www.cnblogs.com/gujiewei/p/9670573.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的类的初始化顺序详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。