在Java語言中,靜態代碼塊是定義在類中,使用關鍵字static和{}括起來的一段代碼,它在類的載入期間只被執行一次。靜態代碼塊的主要功能是用於對類進行默認的初始化或對一些類變數進行初始化操作。
一、靜態代碼塊的基本語法
靜態代碼塊由關鍵字static和{}括起來的一段代碼組成,它的基本語法格式如下:
static {
// 靜態代碼塊的具體執行內容
}
靜態代碼塊沒有方法名,並且不需要在外部進行調用。在Java程序進行編譯時,靜態代碼塊中的代碼會被自動合併到類構造器內部,並且會在類載入期間被執行,且只會執行一次。
二、靜態代碼塊的應用場景
1、類變數的初始化
靜態代碼塊可以對類的靜態變數進行初始化。例如,下面的代碼是一個簡單的小例子:
class MyClass {
public static int count;
static {
count = 0;
}
public MyClass() {
count++;
}
}
在這個例子中,我們定義了一個靜態變數count,並在靜態代碼塊中對其進行賦值。由於count是一個類變數,因此整個程序中只有一個count變數,它的值在第一次執行靜態代碼塊時被賦值為0。
在MyClass類的構造函數中,我們每次實例化一個對象時,都會將count加1。這意味著,我們可以通過MyClass.count來獲取到當前已經創建了多少個MyClass對象:
public static void main(String[] args) {
MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
MyClass obj3 = new MyClass();
System.out.println(MyClass.count); // 輸出 3
}
2、對類的默認初始化
當一個類被載入時,會執行靜態代碼塊來對類進行初始化,這是Java語言對類的默認初始化。
例如,下面的代碼會輸出”Hello World!”,這是因為當程序載入MyClass類時,靜態代碼塊被執行,所以會執行System.out.println()方法,列印出”Hello World!”:
class MyClass {
static {
System.out.println("Hello World!");
}
}
三、靜態代碼塊的特點
1、執行順序
在一個類中定義多個靜態代碼塊時,它們的執行順序是按照它們在類中出現的順序執行的。
例如:
class MyClass {
static {
System.out.println("First static block.");
}
public static int count = 0;
static {
System.out.println("Second static block.");
}
}
此時執行MyClass.count的值是0,同時,執行結果會輸出"First static block."和"Second static block."。
2、靜態代碼塊只執行一次
靜態代碼塊只在類第一次載入時被執行,以後再創建該類的實例時,靜態代碼塊不再被執行。
例如:
class MyClass {
static {
System.out.println("First static block.");
}
public MyClass() {
System.out.println("Hello World");
}
}
此時,只有在第一次創建MyClass對象時,才會執行靜態代碼塊並輸出"First static block.",之後再創建MyClass對象時不再執行。
3、靜態代碼塊和靜態變數的執行順序
對於下面的代碼:
class MyClass {
public static int count = 0;
static {
System.out.println("Static block.");
}
public MyClass() {
count++;
System.out.println(count);
}
}
當我們創建一個MyClass對象時,輸出的結果是什麼?
答案是:
Static block.
1
這是因為靜態代碼塊會在類的靜態變數之前被執行,所以靜態變數count在靜態代碼塊執行完畢後被賦值為0。
四、總結
靜態代碼塊是Java語言中一個重要的特性,它主要用於對類變數進行初始化和對類進行默認初始化。靜態代碼塊的語法簡單,但應用廣泛,可以用於各種場合,給程序員提供了很大的便利。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/193038.html