class Demo
{
private static int day=0;
private static int age=0;
public Demo()
{
day=day+1;
System.out.println("構造函數day="+day);
}
{
age=age+1;
System.out.println("構造代碼塊age="+age);
}
static
{
System.out.println("靜態代碼塊");
}
public static void main(String[] args)
{
Demo v=new Demo();//此時爲age爲1
System.out.println("new實例第一個對象day="+v.day);
System.out.println("new實例第一個對象age="+v.age+"\n");
Demo v1=new Demo();//此時age=?
System.out.println("new實例第2個對象day="+v1.day);
System.out.println("new實例第2個對象age="+v1.age);
System.out.println("類名調用static變量 age="+Demo.age);
System.out.println("類名調用static變量 age="+Demo.day);
}
}
運行結果:
筆記:
java中四種代碼塊:
1.普通代碼塊:直接在一個方法中出現的{}就稱爲普通代碼塊
2.構造代碼塊:直接在類中定義的沒有加static關鍵字的代碼塊{}稱爲構造代碼塊
3.靜態代碼塊:使用static關鍵字聲明的代碼塊稱爲靜態代碼塊,靜態塊的主要目的是用來爲靜態屬性(類)初始化.靜態代碼塊——>構造代碼塊——>構造方法(構造函數)的執行,靜態代碼塊只執行一次!
4.同步代碼塊:
比較:靜態代碼塊與靜態方法
1.靜態代碼塊是自動執行的;
2.靜態方法是被調用的時候才執行的
靜態代碼塊與非靜態代碼塊:
1.靜態代碼塊只給第一次類的實例初始化
2.非靜態代碼塊每次類的實例都初始化(執行)
非靜態代碼塊與構造函數:
1.構造函數是給對應的對象進行初始。因爲:一個類中可以有多個構造函數,至於類的實例(創建對象)是根據傳入的形式參數(形參個數、形參類型)而決定執行哪一個構造函數,
2.非靜態構造代碼塊是給所有對象進行初始化。每創建一個對象(類的實例)都會執行非靜態代碼塊
static:
1.static修飾變量又名靜態變量(全局變量):
a.在類中定義static變量,該類中函數可以直接調用(格式:直接調用變量名)
b.任何方法中不可以定義靜態變量(用static修飾)
c.在本類中調用Demo類中的static int a;格式:類名.變量名(Demo.a)
d.static修飾的變量,在類被載入時創建,隨類的結束才釋放
內存:靜態變量位於方法區,被類的所有實例共享。靜態變量可以直接通過類名進行訪問,其生命週期取決於類的生命週期
本人初學,如有錯誤請留言並指正。謝謝!
轉載請註明出處,謝謝!作者:逝秋http://blog.csdn.net/vvqiu