Java簡明解讀代碼塊的應(yīng)用
什么是代碼塊
java中被 {} 括起來的代碼這部分被稱為代碼塊
代碼塊的分類
普通代碼塊(本地代碼塊)
構(gòu)造塊(實例代碼塊)
靜態(tài)塊
同步代碼塊
本片文章就先講普通代碼塊,構(gòu)造快和靜態(tài)塊。而同步代碼塊一般在多線程種用到,后面寫到多線程的時候會說同步代碼塊,在這就不多說了。代碼塊還是很簡答的,但是有一些要注意的點希望大家記住,接下來我會通過普通代碼塊,構(gòu)造快和靜態(tài)塊一起對比來講解。
普通代碼塊
普通代碼塊就是用{}括起來的代碼,這部分就是普通代碼塊,也稱本地代碼塊。舉個例子,看下面這段代碼:
public class Test {
public static void main(String[] args) {
{
System.out.println("這是普通代碼塊");
}
}
}主函數(shù)中,輸出 “這是普通代碼塊”這個部分是被{}括起來的部分,并且它的前面沒有任何限制條件,這部分就是 普通代碼塊。當(dāng)然這種代碼塊沒什么太大的意義,因為沒有限制條件,加不加{}它都會執(zhí)行,所以平時不加{}也可以。
構(gòu)造塊(實例代碼塊)
實例代碼塊一般定義在類的內(nèi)部,方法的外部??聪旅孢@段代碼:
class blocks{
public int a;
{
this.a = 1;
System.out.println("這是實例代碼塊");
}
public class Test {
public static void main(String[] args) {
}
}而實例代碼塊和普通代碼塊非常像,只是位置不同而已,還有一點,實例代碼塊可以為普通的成員變量進(jìn)行賦值。
靜態(tài)代碼塊
靜態(tài)成員變量也就是被static修飾的變量的初始化分為兩種:就地初始化 和 靜態(tài)代碼塊初始化。
就地初始化就是在創(chuàng)建變量的時候就給它進(jìn)行了賦值。接下來我們來看一下靜態(tài)代碼塊初始化,
先來了解一下什么是靜態(tài)代碼塊,看一下下面的代碼:
class blocks{
static int a ;
static {
a = 1;//對靜態(tài)的成員變量進(jìn)行賦值
System.out.println("這是靜態(tài)代碼塊");
}
}
public class Test {
public static void main(String[] args) {
}
}靜態(tài)代碼塊就是在普通代碼塊的前面加了一個static,這就是靜態(tài)代碼塊。而我可以在靜態(tài)代碼塊里面對靜態(tài)成員變量進(jìn)行賦值,靜態(tài)代碼塊只能為靜態(tài)的成員變量進(jìn)行賦值。
代碼塊的一些特性
靜態(tài)代碼塊不管生成多少個對象,其只會執(zhí)行一次
如果有多個靜態(tài)或?qū)嵗a塊,看定義的順序
如果沒有實例化對象,只會執(zhí)行靜態(tài)的
靜態(tài)成員變量是類的屬性,因此是在JVM加載類時開辟空間并初始化的
如果一個類中包含多個靜態(tài)代碼塊,在編譯代碼時,編譯器會按照定義的先后次序依次合并
實例代碼塊只有在創(chuàng)建對象時才會執(zhí)行
在這給大家講解一下代碼塊的特性,看一下下面這段代碼:
class Blocks {
public int a;
static int b;
public double c;
public Blocks(){
System.out.println("這是一個不帶參數(shù)的構(gòu)造方法");
}
{
this.a = 1;
System.out.println("這是實例代碼塊");
}
static {
b = 1;
System.out.println("這是靜態(tài)代碼塊");
}
}
public class Test {
public static void main(String[] args) {
Blocks blocks = new Blocks();
}
}我們都知道我們在主函數(shù)中創(chuàng)建對象的時候,編譯器會調(diào)用構(gòu)造方法,也就是public Blocks這個函數(shù)會被執(zhí)行。那么這段代碼的運行結(jié)果是什么?是只執(zhí)行構(gòu)造方法?還 是從上到下順序執(zhí)行?
答案是**靜態(tài)代碼塊先執(zhí)行,然后是實例代碼塊,最后是構(gòu)造方法。**運行結(jié)果如圖所示:

不只是這樣,靜態(tài)代碼塊在整個程序中,運行且只運行一次??聪旅孢@張圖:

這里我在上面代碼的基礎(chǔ)上又創(chuàng)建了一個對象,除了靜態(tài)代碼塊,其它都是執(zhí)行了兩次。剩下的還有一些結(jié)論,大家記一下就可以了。
到此這篇關(guān)于Java簡明解讀代碼塊的應(yīng)用的文章就介紹到這了,更多相關(guān)Java代碼塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java線程通信中關(guān)于生產(chǎn)者與消費者案例分析
這篇文章主要介紹了Java線程通信中關(guān)于生產(chǎn)者與消費者案例,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
Java調(diào)用Docx4j庫玩轉(zhuǎn)Word文檔處理
在 Java 開發(fā)里處理 Word 文檔時,Docx4j 可是個超厲害的庫,它能讓咱輕松創(chuàng)建,讀取,修改和轉(zhuǎn)換 Word 文檔,下面我們就來看看具體是如何操作的吧2025-02-02
JavaWeb Servlet生命周期細(xì)枝末節(jié)處深究
Servlet指在服務(wù)器端執(zhí)行的一段Java代碼,可以接收用戶的請求和返回給用戶響應(yīng)結(jié)果,下面這篇文章主要給大家介紹了關(guān)于JavaWeb.servlet生命周期的相關(guān)資料,需要的朋友可以參考下2022-10-10
Spring Cloud EureKa Ribbon 服務(wù)注冊發(fā)現(xiàn)與調(diào)用
這篇文章主要介紹了Spring Cloud EureKa Ribbon 服務(wù)注冊發(fā)現(xiàn)與調(diào)用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
SpringCloud Nacos作為配置中心超詳細(xì)講解
這篇文章主要介紹了Springcloud中的Nacos作為配置中心,本文以用戶微服務(wù)為例,進(jìn)行統(tǒng)一的配置,結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
詳解Java的call by value和call by reference
在本篇文章里小編給大家總結(jié)了關(guān)于Java的call by value和call by reference的相關(guān)用法和知識點內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-03-03
使用springboot在工具類中讀取配置文件(ClassPathResource)
這篇文章主要介紹了使用springboot在工具類中讀取配置文件(ClassPathResource),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
SpringBoot項目離線環(huán)境手動構(gòu)建的過程
文章介紹了如何在IntelliJ IDEA中手動創(chuàng)建一個Spring Boot項目,并詳細(xì)講解了pom.xml文件的配置和基本項目結(jié)構(gòu)的設(shè)置,感興趣的朋友跟隨小編一起看看吧2025-01-01
詳解使用Spring Security進(jìn)行自動登錄驗證
本篇文章主要介紹了詳解使用Spring Security進(jìn)行自動登錄驗證,非常具有實用價值,需要的朋友可以參考下2017-09-09

