Java基础篇:四种代码块详解
所謂代碼塊,就是用大括號{}將多行代碼封裝在一起,形成一個獨立的數據體,用于實現特定的算法。一般來說,代碼塊是不能單獨運行的,它必須有運行主體。在Java中代碼塊主要分為四種:普通代碼塊、靜態代碼塊、同步代碼塊、構造代碼塊。
一、普通代碼塊:
普通代碼塊就是類中方法的方法體;普通代碼塊是不能夠單獨存在的,他必須緊跟在方法名后面,同時也必須使用方法名調用它。
public class Test {public void test(){System.out.println("普通代碼塊");} }二、靜態代碼塊:
靜態代碼塊就是用static修飾的用{}括起來的代碼段,他的主要目的就是對靜態屬性進行初始化。靜態代碼塊在第一次加載此類的時候被執行,并且只會執行一次,靜態代碼塊優先優先于構造代碼塊執行。
public class Test {static{System.out.println("靜態代碼塊");} }三、同步代碼塊:
同步代碼塊,就是使用synchronized關鍵字修飾的用{}括起來的代碼片段,他表示同一時間只能有一個線程進入到該方法塊中,是一種多線程保護機制。在多線程環境下,對共享數據進行讀寫操作是需要互斥進行的,否則會導致數據的不一致性,常見的是synchronized用來修飾方法,其語義是任何線程進入synchronized需要先取得對象鎖,如果對象鎖被占用了,則阻塞等待。synchronized實現了互斥訪問共享資源,但synchronized也是有代價的,會造成系統性能的降低。
public class Test {synchronized(obj){ System.out.println("同步代碼塊");} }四、構造代碼塊:
構造代碼塊就是用{}括起來的代碼片段,構造代碼塊會在創建對象時被調用,每次創建對象時會被調用,并且優先于類構造函數執行。構造代碼塊中定義的變量是局部變量。
new一個對象的時候總是先執行構造代碼,在執行構造函數。但是有一點需要注意的是,構造代碼塊不是在構造函數之前運行的,它是依托構造函數執行的。正式由于構造代碼塊有這幾個特性,所以它常用語如下場景:
1、初始化實例變量:
如果一個類中存在若干個構造函數,這些構造函數都需要對實例變量進行初始化,如果我們直接在構造函數中實例化,必定會產生很多重復代碼,繁瑣和可讀性差。這時,我們可以充分利用構造代碼塊來實現,這是利用編譯器會將構造代碼塊添加到每個構造函數中的特性。
2、初始化實例環境:
一個對象必須在適當的場景下才能存在,如果沒有適當的場景,則就需要在創建對象時創建此場景,我們可以利用構造代碼塊來創建此場景,尤其是該場景的創建過程較為復雜的時候。
上面兩個常用場景都充分利用構造代碼塊的特性,能夠很好的解決在實例化對象時構造函數比較難解決的問題,利用構造代碼不僅可以減少代碼量,同時也是程序的可讀性增強了。特別是當一個對象的創建過程比較復雜,需要實現一些復雜邏輯,這個時候如果在構造函數中實現邏輯,這是不推薦的,因為我們提倡構造函數要盡可能的簡單易懂,所以我們可以使用構造代碼封裝這些邏輯實現部分。
參考博客:
https://blog.csdn.net/zhangzeyuaaa/article/details/16907921
https://blog.csdn.net/chenssy/article/details/14486833
總結
以上是生活随笔為你收集整理的Java基础篇:四种代码块详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础篇:static关键字
- 下一篇: Java基础篇:内部类详解