1. 程式人生 > >java基礎——各種變量你暈了不?

java基礎——各種變量你暈了不?

靜態 構造器 data ava ati word 類變量 str 類構造

java 中的變量大致分為 成員變量 和 局部變量 兩大類。

成員變量:
在類體裏面定義的變量稱為成員變量。
假設該成員變量有 static keyword修飾。則該成員變量稱為 靜態變量 類變量
假設該成員變量沒有 static keyword修飾,則該成員變量被稱為 非靜態變量 實例變量

局部變量:
形參、方法內定義的變量、代碼塊中定義的變量,都屬於局部變量。

類變量 (靜態變量
1. 能夠向前引用
2. 變量屬於類本身
3. 類變量不依賴類的實例,類變量僅僅在初始化時候在棧內存中被分配一次空間。不管類的實例被創建幾次。都不再為類變量分配空間

4. 通過類的隨意一個實例來訪問類變量,底層都將將其轉為通過類本身來訪問類變量。它們的效果是一樣的
5. 一旦類變量的值被改變,通過類或類的隨意一個實例來訪問類變量,得到的都將是被改變後的值
6. 將在類的初始化之前初始化

實例變量(非靜態變量)
1. 不能向前引用,假設向前引用,則稱為非法向前引用,這是不同意的
2. 變量屬於類的實例對象
3. 隨著類的實例被創建而分配內存空間

非靜態代碼塊
直接由 { } 包起來的代碼。稱為非靜態代碼塊

靜態代碼塊
直接由 static { } 包起來的代碼,稱為靜態代碼塊


類變量(靜態變量)、實例變量(非靜態變量)、靜態代碼塊、非靜態代碼塊 的初始化時機
由 static keyword修飾的(如:類變量[靜態變量]、靜態代碼塊)將在類被初始化創建實例對象之前被初始化,並且是按順序從上到下依次被運行。
沒有 static keyword修飾的(如:實例變量[非靜態變量]、非靜態代碼塊)初始化實際上是會被提取到類的構造器中被運行的,可是會比類構造器中的
代碼塊優先運行到。其也是按順序從上到下依次被運行。

java基礎——各種變量你暈了不?