static final關鍵字
阿新 • • 發佈:2021-01-31
文章目錄
static final 關鍵字
static
首先,static關鍵字是為了方便在沒有物件的情況下進行呼叫。
靜態常量
靜態變數和常規變數的區別就是,靜態變數是被所有物件共享的,在記憶體中只有一個副本,只在類初次載入時會被初始化;而常規變數只能被自己的物件呼叫,在建立物件的時候被初始化,每個物件都擁有自己的變數,各個物件的變數互不影響。
靜態方法
被static修飾的方法被稱為靜態方法,因為靜態方法不依賴物件,所以呼叫靜態方法時不需要使用this。同時,靜態方法不能訪問類中非靜態的成員變數和方法,因為非靜態的成員變數和方法只能依靠物件來呼叫。非靜態方法可以隨意訪問靜態或非靜態的成員變數/方法。
因此,為什麼要將main函式宣告為static方法,是因為程式在一開始執行的時候,並沒有物件,只能通過類名來訪問。
static修飾類
普通類是不能被static修飾的,只有內部類可以。
特點:
1、在建立靜態內部類的例項時,不需要建立外部類的例項。
public class Outer { //外部類 static class Inner{ //靜態內部類 } } class OtherClass{ Outer.Inner inner = new Outer.Inner(); //建立靜態內部類的物件不用建立外部類的例項 }
2、靜態內部類可以定義靜態成員變數和非靜態成員變數
public class Outer {
static class Inner{
int a = 0; //非靜態成員變數
static int b =0; //靜態成員變數
}
}
class OtherClass{
Outer.Inner inner = new Outer.Inner();
int a1 = inner.a; //非靜態成員變數的訪問需要使用靜態類物件來呼叫
int b1 = Outer.Inner.b; //靜態成員變數的訪問只需要類名就可以
}
3、靜態內部類可以直接訪問外部類的靜態成員,如果要訪問外部類的例項成員,則需要通過外部類的例項來訪問
public class Outer {
int a2=0;
static int b2 =0;
static class Inner{
Outer outer = new Outer();
int a3= outer.a2; //訪問外部類的正常成員變數需要通過外部類的例項
int b3 = b2; //外部類的靜態成員變數則可以直接訪問
}
}
static修飾程式碼塊
用來形成靜態程式碼塊優化程式效能。靜態程式碼塊可以放在類中的任意位置,類中可以有多個靜態程式碼塊。在類初次被載入的過程中,靜態程式碼塊會按照順序來執行,並且只會執行一次。
靜態程式碼塊可以用來優化那些只需在類載入的過程中執行一次的程式碼。
Java類初始化的順序
final
修飾類
修飾類時,表明這個類不能被繼承。final類中的成員變數可以根據需要來設定為final型,但是final類中的方法是會被隱式的宣告為final方法。
修飾方法
修飾方法時,表明該方法不會被繼承類給修改。類的private方法會被隱式的指定為final方法。
修飾變數
對於變數,一旦使用final修飾,則將在初始化後,如果是基本資料型別的變數,則無法改變其初始值;如果是引用型變數,則不能將其指向其他的物件。