說明:這只是本人的學習Java的個人心得與見解,分享出來,也算是自己的筆記。(本人小白,有錯誤的話望大神指出,不喜勿噴。-.-)
靜態變量
– 在一個Java類中,可以使用static關鍵字來修飾成員變量,該變量被稱作靜態變量
– 靜態變量被所有實例共享,可以使用“類名.變量名”的形式來訪問
– static關鍵字只能用於修飾成員變量,不能用於修飾局部變量,否則編譯會報錯,下面的Demo是違反語法的。
public class Student{
public void study(){
static int num=10;//錯誤的
}
}
靜態方法
--被static關鍵字修飾的方法稱為靜態方法
--同靜態變量一樣,靜態方法可以使用“類名.方法名”的方式來訪問,也可以通過類的實例對象來訪問。
--在一個靜態方法中只能訪問用static修飾的成員,原因在於沒有被
static修飾的成員需要先創建對象才能訪問,而靜態方法在被調用時可以不創建任何對象。
靜態程序塊
– 用static關鍵字修飾的程序塊稱為靜態程序塊
– 當類被加載時,靜態代碼塊會執行,由於類只加載一次,因此靜態代碼塊只執行一次
– 在程序中,通常使用靜態代碼塊來對類的成員變量進行初始化
•1、什麼是程序塊
類中除了有成員變量、方法和構造方法,還可以使用程序塊,所謂程序塊就是由一對花括號({})包括的語句塊。
•2、程序塊的作用
在Java中,程序塊的作用相當於完成一些初始化操作,常常在程序塊實現對成員變量的初始化賦值。
普通程序塊和靜態程序塊有以下區別:
執行的順序不同,靜態程序塊在編譯即被執行且執行一次,而普通程序塊只有在使用new運算符實例化對象被調用且執行一次;
靜態程序塊只能訪問類成員,而普通程序塊既可以訪問實例成員,也可以訪問類成員。
下面開始詳細的講解與Demo
前提引入:
Java 中可以通過初始化塊進行數據賦值
以Demo說明:
public class HelloWorld{
String name;
{
name="love you ";
}
}
在類的聲明中,可以包含多個初始化塊,當創建類的實例時,就會依次執行這些代碼塊。
>>如果使用 static 修飾初始化塊,就稱為靜態初始化塊。
需要特別注意:靜態初始化塊只在類加載時執行,且只會執行一次,同時靜態初始化塊只能給靜態變量賦值,不能初始化普通的成員變量。
Demo:
public class StaticBlock{
int num1;
int num2;
static int num3;
//構造方法
public StaticBlock(){
num1=91;
System.out.println("用構造方法完成num1的賦值");
}
//初始化塊
{
num2=74;
System.out.println("用初始化塊完成num2的賦值");
}
//靜態的初始化塊 static
static{
num3=85;
System.out.println("用靜態的初始化塊完成num3的賦值");
}
public static void main(String[] args){
StaticBlock sta1=new StaticBlock();
System.out.println("num1:"+sta1.num1);
System.out.println("num2:"+sta1.num2);
System.out.println("num3:"+num3);
StaticBlock sta2=new StaticBlock();
}
}
輸出的結果為:
為什麼會有這養的輸出結果呢????
注意到輸出的順序了嗎?
通過輸出結果,我們可以看到:
程序運行時靜態初始化塊最先被執行,
然後執行普通初始化塊,
最後才執行構造方法。
由於靜態初始化塊只在類加載時執行一次,所以當再次創建對象 hello2 時並未執行靜態初始化塊。