卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

java成員變量初始化 如何初始化一個(gè)類中的靜態(tài)成員變量?

如何初始化一個(gè)類中的靜態(tài)成員變量?如果我們不考慮父類,我們可以先進(jìn)行靜態(tài)初始化,然后進(jìn)行非靜態(tài)初始化。靜態(tài)初始化包括靜態(tài)成員變量和靜態(tài)塊的初始化。實(shí)際上,靜態(tài)塊在編譯期間是集中的。非靜態(tài)初始化包括非靜

如何初始化一個(gè)類中的靜態(tài)成員變量?

如果我們不考慮父類,我們可以先進(jìn)行靜態(tài)初始化,然后進(jìn)行非靜態(tài)初始化。

靜態(tài)初始化包括靜態(tài)成員變量和靜態(tài)塊的初始化。實(shí)際上,靜態(tài)塊在編譯期間是集中的。

非靜態(tài)初始化包括非靜態(tài)成員變量初始化、非靜態(tài)塊和構(gòu)造方法,編譯后集中在構(gòu)造方法中。

如果沒有相互通話,那就非常簡(jiǎn)單了。首先,靜態(tài)初始化。如果在靜態(tài)初始化過程中調(diào)用了后者呢?!你可以編寫一個(gè)代碼來測(cè)試它:

輸出:

你可以先看到它確實(shí)是靜態(tài)初始化,但是中間有對(duì)構(gòu)造方法的調(diào)用。

雖然編譯器不報(bào)告錯(cuò)誤,但此調(diào)用實(shí)際上是有風(fēng)險(xiǎn)的。

由于靜態(tài)成員變量(如果已設(shè)置)在初始化之前調(diào)用類構(gòu)造函數(shù)(假設(shè)存在依賴關(guān)系),因此該過程實(shí)際上是不可控制的。

看看這個(gè)例子:你能想象這種輸出嗎?

因此,如果必須在靜態(tài)初始化過程中調(diào)用此類的構(gòu)造函數(shù)。

一定要注意初始化順序,準(zhǔn)確到語句。

的靜態(tài)成員變量為什么一定要初始化?

我們知道C類的靜態(tài)成員變量需要初始化,但是為什么要初始化它們呢。實(shí)際上,“靜態(tài)成員變量需要初始化”這句話有一些問題。應(yīng)該說“靜態(tài)成員變量需要定義”是準(zhǔn)確的,而不是初始化。兩者的區(qū)別在于初始化是分配一個(gè)初始值,而定義是分配內(nèi)存。靜態(tài)成員變量只在類中聲明,而沒有定義,因此在類外定義它們實(shí)際上是為靜態(tài)成員變量分配內(nèi)存。

為什么類的靜態(tài)成員變量要在文件域中初始化?

1. 在類中,只聲明靜態(tài)變量,沒有定義。

2. 聲明只表示變量的數(shù)據(jù)類型和屬性,不分配內(nèi)存;定義需要分配內(nèi)存。注意:如果inta是在這樣的類中編寫的,那么它是聲明變量和定義變量的組合。

3. 靜態(tài)成員是“類級(jí)”,即與類具有相同的狀態(tài),而普通成員是“對(duì)象(實(shí)例)級(jí)”。類級(jí)成員存在于類的任何對(duì)象之前,并且由類的所有對(duì)象共享。

4. 現(xiàn)在,假設(shè)我們要實(shí)例化這個(gè)類的一個(gè)對(duì)象,會(huì)發(fā)生什么?靜態(tài)成員必須出現(xiàn)在這個(gè)對(duì)象中,對(duì)嗎?是時(shí)候定義靜態(tài)成員了嗎?這顯然不合適。因?yàn)?,例如,如果另一個(gè)線程想要?jiǎng)?chuàng)建這個(gè)類的對(duì)象,靜態(tài)成員也應(yīng)該這樣定義。這將導(dǎo)致兩種可能的情況:1。重復(fù)定義;2。即使沒有重復(fù)的定義,也會(huì)出現(xiàn)競(jìng)爭(zhēng),導(dǎo)致死鎖,從而無法創(chuàng)建對(duì)象。顯然,編譯器無法做到這一點(diǎn)。因此,一個(gè)合理的解決方案是提前在類外定義它,然后與所有對(duì)象共享它。注意:類的靜態(tài)常量成員可以在類內(nèi)初始化。

變量必須初始化嗎?

不。變量在使用前應(yīng)給定一個(gè)值。一個(gè)好的編譯器將幫助您在給定值之前找到所使用的變量。但是,變量不必初始化。在程序顯式初始化之前,在函數(shù)外部或函數(shù)內(nèi)部使用static關(guān)鍵字定義的變量(在數(shù)據(jù)部分中定義的變量,請(qǐng)參見2.1)已由系統(tǒng)初始化為0。在沒有static關(guān)鍵字的函數(shù)或程序塊中定義的變量是自動(dòng)變量。如果不顯式初始化這些變量,它們將具有未定義的值。如果不初始化自動(dòng)變量,則必須確保在使用它之前為它賦值。通過調(diào)用malloc()函數(shù)從堆中分配的空間也包含未定義的數(shù)據(jù),因此在使用它之前必須對(duì)其進(jìn)行初始化,但是通過調(diào)用calloc()函數(shù)分配的空間已初始化為0。

為什么靜態(tài)成員變量要通過類外初始化賦值?

當(dāng)類的數(shù)據(jù)成員聲明為靜態(tài)時(shí),靜態(tài)數(shù)據(jù)成員只能定義一次并由同一類的所有對(duì)象共享。每個(gè)對(duì)象都有類中每個(gè)普通數(shù)據(jù)成員的一個(gè)副本,但靜態(tài)數(shù)據(jù)成員只存在一個(gè)實(shí)例,而不管定義了多少個(gè)類對(duì)象。靜態(tài)數(shù)據(jù)成員的目的之一是統(tǒng)計(jì)實(shí)際存在的對(duì)象數(shù)。靜態(tài)數(shù)據(jù)成員不能在類中初始化。實(shí)際上,類定義只用于描述對(duì)象的藍(lán)圖,其中不允許指定初始值。無法在函數(shù)中初始化靜態(tài)數(shù)據(jù)成員,因?yàn)殪o態(tài)數(shù)據(jù)成員由類的所有對(duì)象共享,因此每次創(chuàng)建類的對(duì)象時(shí),都會(huì)重新初始化靜態(tài)數(shù)據(jù)成員。