java類的生命周期 類的靜態(tài)成員和非靜態(tài)成員有何區(qū)別?
類的靜態(tài)成員和非靜態(tài)成員有何區(qū)別?非靜態(tài)成員也稱為成員變量。它們之間的區(qū)別如下:1。成員變量也稱為實例變量;靜態(tài)變量也稱為類變量。2. 內(nèi)存存儲的區(qū)別在于成員變量存儲在堆內(nèi)存的對象中,靜態(tài)變量存儲在方
類的靜態(tài)成員和非靜態(tài)成員有何區(qū)別?
非靜態(tài)成員也稱為成員變量。它們之間的區(qū)別如下:
1。成員變量也稱為實例變量;靜態(tài)變量也稱為類變量。
2. 內(nèi)存存儲的區(qū)別在于成員變量存儲在堆內(nèi)存的對象中,靜態(tài)變量存儲在方法區(qū)的靜態(tài)區(qū)域中。
3. 根據(jù)primer第四版的解釋,靜態(tài)局部對象必須遵循“確保不遲于程序執(zhí)行過程第一次通過對象的定義語句時初始化”的原則。2同時,我們知道類內(nèi)的執(zhí)行順序不是按行順序執(zhí)行的,而是按對象調(diào)用順序執(zhí)行的。三。以上兩種情況確定了一個問題:如果在類中定義,則靜態(tài)數(shù)據(jù)成員無法初始化,或者在沒有創(chuàng)建對象時初始化時間太晚。[可能的原因之一]4。此外,靜態(tài)成員的生命周期是一旦建立,它們將存在于整個程序的生命周期中。這就是靜態(tài)數(shù)據(jù)成員屬于或不屬于類的原因。如果它們在類中定義,它們將成為類的成員。也就是說,在創(chuàng)建類的多個對象時,會再次聲明和定義變量的位置,并且名稱空間和作用域是相同的,這就導(dǎo)致了名稱重復(fù)的問題。因此,靜態(tài)成員需要獨立于類來定義。6實際上,不需要知道編譯器是如何實現(xiàn)這個規(guī)則的。因為這只是一張紙條。
c 類的靜態(tài)數(shù)據(jù)成員為什么不能在類內(nèi)定義?
1、名稱差異:成員變量也稱為實例變量;靜態(tài)變量也稱為類變量。2、 內(nèi)存存儲的區(qū)別:成員變量存儲在堆內(nèi)存的對象中,靜態(tài)變量存儲在方法區(qū)的靜態(tài)區(qū)域中。3、 生命周期不同:1)成員變量隨對象的出現(xiàn)而出現(xiàn),隨對象的消失而消失。2) 靜態(tài)變量隨著類的出現(xiàn)而出現(xiàn),隨著類的消失而消失。4、 補編:1。靜態(tài)變量用靜態(tài)修飾符聲明;2。它是在實例化類并通過沒有靜態(tài)修飾符的類訪問時創(chuàng)建的。修飾符聲明的變量稱為非靜態(tài)變量;3。它是在實例化對象并通過對象訪問時創(chuàng)建的;4。同一類的所有實例的同一靜態(tài)變量具有相同的值,同一類的不同實例的同一非靜態(tài)變量可以具有不同的值。非靜態(tài)成員(如非靜態(tài)變量和非靜態(tài)函數(shù))不能用于靜態(tài)函數(shù)的實現(xiàn)。6示例:1)使用系統(tǒng)
非靜態(tài)成員也稱為成員變量。兩者的區(qū)別如下:1。成員變量也稱為實例變量;靜態(tài)變量也稱為類變量。2內(nèi)存存儲的區(qū)別在于成員變量存儲在堆內(nèi)存的對象中,靜態(tài)變量存儲在方法區(qū)的靜態(tài)區(qū)域中。三。生命周期的不同成員變量隨著對象的出現(xiàn)而出現(xiàn),隨著對象的消失而消失。靜態(tài)變量隨著類的出現(xiàn)而出現(xiàn),隨著類的消失而消失。靜態(tài)數(shù)據(jù)成員與普通數(shù)據(jù)成員的區(qū)別在于:(1)普通數(shù)據(jù)成員屬于類的特定對象。只有在創(chuàng)建對象時,才能為普通數(shù)據(jù)成員分配內(nèi)存。靜態(tài)數(shù)據(jù)成員屬于整個類,即使沒有創(chuàng)建對象,該類的靜態(tài)數(shù)據(jù)成員變量也存在。(2) 因為類的靜態(tài)數(shù)據(jù)成員的存在不依賴于任何類對象的存在,所以類的靜態(tài)數(shù)據(jù)成員應(yīng)該在代碼中顯式初始化,通常在類之外,例如上面的示例。在c11標(biāo)準(zhǔn)中,我們可以在const integer類型的類中為靜態(tài)成員提供初始值,但是要求靜態(tài)成員必須是literal constant類型的constexpr(來自C primer中文版,第270頁)。