1. 程式人生 > >淺談java中的程式碼塊

淺談java中的程式碼塊

java中的程式碼塊

在這裡插入圖片描述

簡述

1.區域性程式碼塊:
在方法中出現;限定變數生命週期,及早釋放,提高記憶體利用率
2.構造程式碼塊:
構造程式碼塊分為有參構造程式碼塊和無參構造程式碼塊,會在建立物件時被呼叫,優先於類建構函式執行
3.靜態程式碼塊
用static{}包裹起來的程式碼塊,只執行一次,優先於構造程式碼塊執行
4.同步塊
後面多執行緒會學到,到時候再來填坑

靜態程式碼塊和構造程式碼塊的特點

靜態程式碼塊:
1.定義在類中方法外,用static修飾
2.它隨著類的載入而載入,載入時機早
3.只執行一次,一般用來初始化操作
構造程式碼塊:
1.定義在類中方法外,與構造方法平級
2.構造程式碼塊優先於構造方法執行,每建立一次,構造程式碼塊就會執行一次。
3.如果不寫構造程式碼塊的話,程式中會有一個預設的無參構造程式碼塊
4.若只寫了一個有參構造程式碼塊,那麼就不會有預設的無參構造程式碼塊了,此時如果想用無參構造的話必須自己寫一個無參構造方法

舉例

1.普通程式碼塊

public class demo {
    public static void main(String[] args) {
        { 
            int x = 3;
            System.out.println("普通程式碼塊內的變數x=" + x);
        }
        int x = 1;
        System.out.println("主方法內的變數x=" + x);
        
    }
} 

執行結果

普通程式碼塊內的變數x=3
主方法內的變數x=1

2.構造程式碼塊

class test{
    public test(){
        System.out.println("這是一個無參構造方法");
    }
    public test(int a){
        System.out.println("這是一個有參構造方法,引數是a,a="+a);
    }
}
public class demo {
    public static void main(String[] args) {
        new test();
        new test(5);
    }
}

輸出結果

這是一個無參構造方法
這是一個有參構造方法,引數是a,a=5

3.靜態程式碼塊

class test{
    public test(){
        System.out.println("這是一個無參構造方法");
    }
    public test(int a){
        System.out.println("這是一個有參構造方法,引數是a,a="+a);
    }
    static {
        System.out.println("test的靜態程式碼塊");
    }
}
public class demo {
    public static void main(String[] args) {
        new test();
        new test(5);
    }
}

結果

test的靜態程式碼塊
這是一個無參構造方法
這是一個有參構造方法,引數是a,a=5

例題:
看程式碼寫出輸出結果

class Student {
			static {
				System.out.println("Student 靜態程式碼塊");
			}
			
			{
				System.out.println("Student 構造程式碼塊");
			}
			
			public Student() {
				System.out.println("Student 構造方法");
			}
		}

		class StudentDemo {
			static {
				System.out.println("StudentDemo的靜態程式碼塊");
			}
			
			public static void main(String[] args) {
				System.out.println("我是main方法");
				
				Student s1 = new Student();
				Student s2 = new Student();
			}
		}

答案

StudentDemo的靜態程式碼塊
我是main方法
Student 靜態程式碼塊
Student 構造程式碼塊
Student 構造方法
Student 構造程式碼塊
Student 構造方法

1.靜態程式碼塊先於主方法執行,建立Student物件時先執行Student中的靜態程式碼塊,靜態程式碼塊用static修飾,存在於方法區中,所以只在載入.class位元組碼檔案進入方法區時執行一次
2.new了Student物件之後,會先執行構造程式碼塊進行初始化操作,然後執行構造方法,沒new一次就會執行一次這樣的操作,所以可以看到結果中構造程式碼塊和構造方法都出現了兩次