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

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

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

