static與final修飾類屬性及初始化問題

2021-06-21 06:32:59 字數 1161 閱讀 1487

static:

1. static修飾乙個屬性字段,那麼這個屬性欄位將成為類本身的資源,public修飾為共有的,可以在類的外部通過test.a來訪問此屬性;在類內部任何地方可以使用。如果被修飾為private私有,那麼只能在類內部使用。

2. 如果屬性被修飾為static靜態類資源,那麼這個字段永遠只有乙個,也就是說不管你new test()多少個類的物件,操作的永遠都只是屬於類的那一塊記憶體資源。

final:

1. final 用於宣告屬性、方法和類,分別表示屬性一旦被分配記憶體空間就必須初始化並且以後不可變;方法一旦定義必須有實現**並且子類裡不可被覆蓋;類一旦定義不能被定義為抽象類或是介面,因為不可被繼承。

2. 被final修飾而沒有被static修飾的類的屬性變數只能在兩種情況下初始化:

1) 在它被定義的時候

public class test

}

2) 在建構函式裡初始化

public class test

}

當這個屬性被修飾為final,而非static的時候,它屬於類的例項物件的資源,當類被載入進記憶體的時候這個屬性並沒有給其分配記憶體空間,而只是定義了乙個變數a,只有當類被例項化的時候這個屬性才被分配記憶體空間,而例項化的時候同時執行了建構函式,所以屬性被初始化了,也就符合了當它被分配記憶體空間的時候就需要初始化,以後不再改變的條件。

3. 同時被final和static修飾的類的屬性變數只能在兩種情況下初始化:

1) 在它被定義的時候

public class test

}

2) 在類的靜態塊裡初始化

public class test

}

當類的屬性被同時被修飾為static和final的時候,他屬於類的資源,那麼就是類在被載入進記憶體的時候(也就是應用程式啟動的時候)就要為屬性分配記憶體,所以此時屬性已經存在,它又被final修飾,所以必須在屬性定義了以後就給其初始化值。而建構函式是在當類被例項化的時候才會執行,所以不能用建構函式。而static塊是類被載入的時候執行,且只執行這一次,所以在static塊中可以執行初始化。

final修飾變數 與Stastic修飾的變數

一 final修飾變數 final可以修飾成員變數,也可以修飾區域性變數 形參。final變數一旦獲得初始值之後,final的變數就不能被重新賦值。成員變數是隨類初始化或物件初始化而初始化的,當執行靜態初始化塊時候可以對類屬性進行賦初始值,當執行普通初始化塊或者構造器的時候可以對例項屬性賦初始值。因...

static修飾屬性,方法,類

本文 於 一 static修飾屬性 1.屬性隨著類的載入而載入,是類變數,其載入早於物件,不需要new即可載入 2.類變數所在的類的所有物件共用這乙個屬性,存放在靜態域中 二 static修飾方法 1.方法隨著類的載入而載入隨著類的載入而載入,是類方法,其載入早於物件,不需要new 2類方法所在的類...

static與final的區別

一 1 static變數 對於靜態變數在記憶體中只有乙個拷貝 節省記憶體 jvm只為靜態分配一次記憶體,在載入類的過程中完成靜態變數的記憶體分配,可用類名直接訪問 方便 當然也可以通過物件來訪問 但是這是不推薦的 對於例項變數,沒建立乙個例項,就會為例項變數分配一次記憶體,例項變數可以在記憶體中有多...