程式碼塊
我們主要觀察普通程式碼塊、構造塊、靜態塊的主要作用。
在程式編寫之中可以直接使用”{}” 定義一段語句,那麼根據此部分定義的位置以及關鍵字的不同可以分為以下幾種:
- 普通程式碼塊
- 構造塊
- 靜態塊
不過,我們在寫程式的時候,儘量不去使用程式碼塊。
普通程式碼塊
如果說一個程式碼塊寫在了方法裡,那麼就稱它了普通程式碼塊。
程式碼例項
下面說的變數,只是相對關係。
public class TestDemo {
public static void main(String[] args) {
{// 普通程式碼塊
int num = 10; //區域性變數
System.out.println(num);
}
int num = 100; // 相對的上面的區域性變數,為全域性變數
System.out.println(num);
}
}
實際上普通程式碼塊就是為了防止在方法裡面編寫的程式碼過多時,有可能產生的變數重名。對一個方法的程式碼進行區域性分割。
構造塊
如果說現在將一個程式碼塊寫在了一個類裡面,那麼我們就稱為構造塊。
程式碼例項
class Book{
public Book() { // 構造方法
System.out.println("【A】 Book 類的構造方法");
}
{// 將程式碼塊寫在了類裡面
System.out.println("【B】 Book 類的構造塊");
}
}
public class TestDemo {
public static void main(String[] args) {
new Book();
}
}
控制檯輸出
【B】 Book 類的構造塊
【A】 Book 類的構造方法
此時例項化 Book 類物件時,雖然執行的是 Book 類的構造方法,但是構造塊裡面的程式碼也執行了。並且會發現構造塊的程式碼是優先於 構造方法執行。
程式碼例項
class Book{
public Book() { // 構造方法
System.out.println("【A】 Book 類的構造方法");
}
{// 將程式碼塊寫在了類裡面
System.out.println("【B】 Book 類的構造塊");
}
}
public class TestDemo {
public static void main(String[] args) {
new Book();
new Book();
new Book();
}
}
控制檯輸出
【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法
從控制檯的輸出可以看到,每當我們例項化一個 Book 類時,我們的構造塊都會被執行一次。
靜態塊
如果我們的程式碼塊使用了 static 進行定義的話,那麼就被稱為靜態塊。我們分為兩種情況來看。
在非主類中使用
程式碼例項
class Book{
public Book() { // 構造方法
System.out.println("【A】 Book 類的構造方法");
}
{// 將程式碼塊寫在了類裡面
System.out.println("【B】 Book 類的構造塊");
}
static {// 將程式碼塊寫在了類裡面
System.out.println("【C】 Book 類的構造塊");
}
}
public class TestDemo {
public static void main(String[] args) {
new Book();
new Book();
new Book();
}
}
控制檯輸出
【C】 Book 類的構造塊
【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法
【B】 Book 類的構造塊
【A】 Book 類的構造方法
從上面我們可以看到,靜態塊只是執行了一次,並且是優先於構造方法和構造塊。也就是說,不管例項化多少個物件,靜態塊只執行一次。
在主類中使用
程式碼例項
public class TestDemo {
static {
System.out.println("**********");
}
public static void main(String[] args) {
System.out.println("main()");
}
}
控制檯輸出
**********
main()
從控制檯的輸出,我們就可以知道,static 靜態塊 是優先於 main 方法執行的