淺談java中的程式碼塊
阿新 • • 發佈:2018-12-27
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一次就會執行一次這樣的操作,所以可以看到結果中構造程式碼塊和構造方法都出現了兩次