原文鏈接:https://blog.csdn.net/qq_41679818/article/details/93188324
代碼塊概述
在Java中,使用{}大括號括起來的代碼被稱為代碼塊。
根據其位置和聲明的不同,代碼塊可以分為:
局部代碼塊(普通代碼塊):控制變量的生命周期,提高內存利用率
構造代碼塊:可以給所有對象進行初始化
靜態代碼塊:對靜態屬性、類進行初始化,並且只執行一次。
同步代碼塊(多線程講解)。
構造代碼塊
在類中直接定義沒有任何修飾符、前綴、后綴的代碼塊即為構造代碼塊。
特點:
new一個對象的時候總是先執行構造代碼,再執行構造函數。
有一點需要注意構造代碼不是在構造函數之前運行的,它是依托構造函數執行的。
正是由於構造代碼塊有這幾個特性,所以它常用於如下場景:
作用:
可以給所有對象進行初始化
代碼示例:
public class demo1 { public static void main(String[] args) { Test test = new Test(3); //構造代碼塊會在構造函數被調用時執行, 且在這個例子中比"this.id=id;"語句先執行,作用是給對象統一初始化數據; System.out.println(test); } } class Test{ int id; String name; { this.id= 5; this.name = "測試"; System.out.println("這是構造代碼塊"); } public Test(int id) { this.id = id; } public String toString() { return "name: "+this.name +" , "+"id: "+ this.id ; }
運行結果:
靜態代碼塊
靜態代碼塊就是用static修飾的用{}括起來的代碼段
特點:
它是隨着類的加載而執行,只執行一次,優先於構造函數
靜態代碼塊其實就是給類初始化的,而構造代碼塊是給對象初始化的。
一個類中可以有多個靜態代碼塊
作用:
對靜態屬性進行初始化
注意:
1.靜態代碼塊不能存在於任何方法體內。
2 .靜態代碼塊不能直接訪問靜態實例變量和實例方法,需要通過類的實例對象來訪問。
代碼示例:
public class demo01 { public static void main(String[] args) { Test t=new Test(); } } class Test{ { System.out.println("構造代碼塊"); } public Test(){ System.out.println("我是構造方法"); } static { System.out.println("我是靜態代碼塊"); } }
運行結果:
局部代碼塊
位置在方法內部
作用:
用於限定變量的生命周期,及早釋放變量,提高內存利用率。
public void show(){ { System.out.println("局部代碼塊運行!"); } }