1. 程式人生 > >Java程式碼塊詳解

Java程式碼塊詳解

1、前言今天我來向大家介紹一下Java中的程式碼塊,雖然在開發中不怎麼常用(個人也不是建議使用),但不免也會遇到,有時在看一些jdk原始碼也會經學看它的身影。程式碼塊本身並不很難理解的概念,所謂的程式碼塊就是指使用“{}”括起來的一段程式碼,根據位置不同,偌程式碼塊可以分為普通程式碼塊構造塊靜態程式碼塊同步程式碼塊4種。2、普通程式碼塊簡述:普通程式碼塊就是指直接在方法或是語句中定義的程式碼塊
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方法的優先順序是一樣的。因為java的從上到下依次執行的,所以當優先順序一樣的時候,它會按照程式碼的先後順序執行。3、靜態程式碼塊簡述:靜態程式碼塊是使用static關鍵字宣告的程式碼
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方法---------
	---------普通程式碼塊---------
	在普通程式碼塊中呼叫靜態屬性:哈哈
	在普通程式碼塊中呼叫非靜態屬性:呵呵
 */
執行結果得知靜態程式碼塊優先於main()方法執行,而在類中定義的靜態程式碼塊會優先於構造塊執行,而且不管有多少物件產生,靜態程式碼只執行一次。3.1、靜態程式碼塊只初始化一次
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("我是構造塊");
	}
}

/*		執行結果
    ---------靜態程式碼塊---------
	我是靜態程式碼塊
	我是構造塊
	我是構造塊
	我是構造塊
	我是構造塊
	我是構造塊
 */
4、構造程式碼塊簡述:構造程式碼塊是直接寫在類中的程式碼塊
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開發實戰經典