java 靜態變數 與 非靜態變數

2021-08-31 22:28:41 字數 778 閱讀 1530

一、建立乙個類的物件時(new 類名)時,該類的.class檔案會被載入到一段記憶體中。

1.先將該類的.class檔案會被載入到一段記憶體,初始化static屬性和方法,為他們分配空間,以後一直在記憶體中,即使這個物件被銷毀。(這就是不建議使用static屬性和方法的原因之一)

2.copy其中非static屬性和方法,為他們初始化,分配空間,然後才可以使用,因為非static的屬性和方法是跟隨物件的,所以當物件被**時,屬於該物件的屬性和方法也被**,

再new的時候再生成。

二、執行某類的靜態方法時(類名.方法名),該類不會被載入到記憶體中,也不會自動呼叫構造方法(構造 方法只在例項化的時候才呼叫),既然沒有建立物件就不會存在物件的記憶體位址,得出結論類中的靜態變數和靜態方法的位址是單獨的,和類的物件沒關係。

public class t1 

public static void printf()

/*** 呼叫t1.str0 t1.printf() 都不會呼叫建構函式。

*/}

類中得靜態變數和靜態方法在整個程式結束時按序銷毀,類的靜態變數屬於全域性,在整個應用程式都可以使用。

靜態方法也和靜態變數一樣占用記憶體嗎?

不管是靜態方法還是例項方法,方法最終在執行時都只占用乙份記憶體,因為它儲存的是程式的**,只有類的資料才會有   多份。

方法靜態動態都是個位元組碼,佔的記憶體都差不多;真正佔記憶體的是物件(主要是屬性字段),特別是在靜態成員上定義的   是乙個集合,然後又往裡面放很多東西的話。因為這樣的記憶體不會被主動釋放。

Java靜態變數和非靜態變數

記憶體分配 靜態方法和靜態變數建立之後一直使用同一塊記憶體,是連續的。非靜態方法會存在於記憶體的多個地方,是離散的。生命週期 靜態變數的生存週期是應用的生存週期。非靜態變數的存在週期取決於例項化的類的存在週期。呼叫方式 靜態變數只能是 class.靜態變數 來呼叫,類的例項不能呼叫。非靜態變數在變數...

靜態變數和非靜態變數

class string1 a和b編譯報錯,can not make a static referrence to no static filed s3,s4 分析 string s1 pingguo string s2 xiangjiao string s3 new string lizi str...

靜態變數,非靜態變數和final變數

package com.founder.bg.quartz.job 7 在程式執行時的區別 例項變數屬於某個物件的屬性,必須建立了例項物件,8 其中的例項變數才會被分配空間,才能使用這個例項變數。靜態變數不屬於某 9 個例項物件,而是屬於類,所以也稱為類變數,只要程式載入了類的位元組碼,10 不用建...