static修飾符的作用及應用
阿新 • • 發佈:2018-12-29
static 修飾符
資料共享
- 成員變數(例項變數)和靜態變數(類變數)的區別
- 兩個變數的生命週期不同
成員變數隨物件的建立而存在,隨物件被回收而釋放
靜態變數隨類的載入而存在,隨類的消失而消失 - 呼叫方式不同
成員變數只能被物件呼叫
靜態變數還可以被類名呼叫 - 資料儲存位置不同
成員變數–>堆記憶體的物件中,也叫物件的特有資料
靜態變數–>方法區(共享資料區)的靜態區,也叫物件的共享資料
- 兩個變數的生命週期不同
- 成員變數(例項變數)和靜態變數(類變數)的區別
修飾變數:
每個物件都共有的屬性就可以設定為static,被修飾的成員被所有的物件共享,且可以直接用 類名.X靜態成員 的方式呼叫
static優先於物件存在,因為static成員隨類的載入就已經存在了修飾方法:靜態方法
靜態方法只能訪問靜態成員(非靜態既可以訪問靜態也可以訪問非靜態)
靜態方法中不可以使用this或者super關鍵字(物件不存在)修飾程式碼塊:靜態程式碼塊
隨著類的載入而執行,而且只執行一次
作用:用於類的初始化
當類中的變數全部是靜態的時候才用靜態程式碼塊去初始化變數
class StaticDemo
{
static int count ;//系統預設初始化為0
static
{
count ++;//一旦載入即執行,且類存在的過程中只執行一次
System.out.println(count);//1
}
}
class ObjectDemo
{
public static void main(String[] args)
{
new StaticDemo();執行,輸出1
}
}
下列情況需要被定義為靜態方法
- 函式沒有訪問到物件的特有資料,即程式碼上沒有用到非靜態成員變數,一般定義為靜態方法
- 如果不需要訪問非靜態變數也可以定義為非靜態方法,但是非靜態方法只能被物件所呼叫,為了呼叫一個沒有訪問到特有資料的方法而建立一個物件是沒有意義的
*/