Java程式碼塊詳解
阿新 • • 發佈:2019-01-06
1、前言今天我來向大家介紹一下Java中的程式碼塊,雖然在開發中不怎麼常用(個人也不是建議使用),但不免也會遇到,有時在看一些jdk原始碼也會經學看它的身影。程式碼塊本身並不很難理解的概念,所謂的程式碼塊就是指使用“{}”括起來的一段程式碼,根據位置不同,偌程式碼塊可以分為普通程式碼塊、構造塊、靜態程式碼塊、同步程式碼塊4種。2、普通程式碼塊簡述:普通程式碼塊就是指直接在方法或是語句中定義的程式碼塊
從上面的程式碼,我們可以發現,普通程式碼塊和main方法的優先順序是一樣的。因為java的從上到下依次執行的,所以當優先順序一樣的時候,它會按照程式碼的先後順序執行。3、靜態程式碼塊簡述:靜態程式碼塊是使用static關鍵字宣告的程式碼public class CodeDemo { public static void main(String[] args) { // 普通程式碼塊 { int x = 10; // 區域性變數 System.out.println("普通程式碼塊---》"+x); //10 } int x = 100; System.out.println("程式碼塊之外---》"+x); //100 } }
執行結果得知靜態程式碼塊優先於main()方法執行,而在類中定義的靜態程式碼塊會優先於構造塊執行,而且不管有多少物件產生,靜態程式碼只執行一次。3.1、靜態程式碼塊只初始化一次package com.java.test; /** * 靜態程式碼塊 * StaticBlock * 建立人:羅祥 * 時間:2018年7月9日-下午12:36:54 * @version 1.0.0 * */ public class StaticBlock { static String str; //靜態程式碼塊 static{ System.out.println("---------靜態程式碼塊---------"); str = "哈哈"; System.out.println(str); //靜態程式碼塊中不能呼叫非靜態的屬性 // System.out.println(str1); str1 cannot be resolved to a variable } public static void main(String[] args){ System.out.println("---------mian方法---------"); String str1 = "呵呵"; //普通程式碼塊 { System.out.println("---------普通程式碼塊---------"); //普通程式碼塊中可呼叫靜態程式碼塊,也可以呼叫非靜態程式碼塊 System.out.println("在普通程式碼塊中呼叫靜態屬性:"+str); System.out.println("在普通程式碼塊中呼叫非靜態屬性:"+str1); } } } /* 執行結果 ---------靜態程式碼塊--------- 哈哈 ---------mian方法--------- ---------普通程式碼塊--------- 在普通程式碼塊中呼叫靜態屬性:哈哈 在普通程式碼塊中呼叫非靜態屬性:呵呵 */
4、構造程式碼塊簡述:構造程式碼塊是直接寫在類中的程式碼塊public class StaticBlock2 { public static void main(String[] args){ new Demo(); new Demo(); new Demo(); new Demo(); new Demo(); } } class Demo{ // 靜態程式碼塊 static{ System.out.println("---------靜態程式碼塊---------"); System.out.println("我是靜態程式碼塊"); } // 構造塊 { System.out.println("我是構造塊"); } } /* 執行結果 ---------靜態程式碼塊--------- 我是靜態程式碼塊 我是構造塊 我是構造塊 我是構造塊 我是構造塊 我是構造塊 */
public class CodeDemo {
public static void main(String[] args) {
new CodeDemo1();
new CodeDemo1();
new CodeDemo1();
}
}
/**
* 構造程式碼塊
* CodeDemo1
* 建立人:羅祥
* 時間:2018年7月9日-下午12:40:57
* @version 1.0.0
*
*/
class CodeDemo1{
// 構造方法
public CodeDemo1() {
System.out.println("構造方法");
}
// 構造塊
{
System.out.println("構造程式碼塊是直接寫在類中的程式碼塊");
}
}
/* 執行結果
構造程式碼塊是直接寫在類中的程式碼塊
構造方法
構造程式碼塊是直接寫在類中的程式碼塊
構造方法
構造程式碼塊是直接寫在類中的程式碼塊
構造方法
*/
構造塊只有在例項化物件的時候才會呼叫,並且優先於構造方法執行,每次例項化物件時都會執行構造中的程式碼,會執行多次。參考資料:李新華《Java開發實戰經典》