Java編程中的4種代碼塊詳解
在Java編程中,代碼塊就是指用“{}”括起來的代碼。下面看一下這四種代碼塊。
1、普通代碼塊
就是指類中方法的方法體。
public void xxx(){ //code }
2、構造塊
下面用“{}”括起來的代碼片段,構造塊在創(chuàng)建對象時會被調用,每次創(chuàng)建對象時都會被調用,并且優(yōu)先于類構造函數(shù)(包括有參和無參的)執(zhí)行。 構造塊中定義的變量是局部變量。
public class Client { {//構造代碼塊 System.out.println("執(zhí)行構造代碼塊"); } publicClient() { System.out.println("執(zhí)行無參構造函數(shù)"); } publicClient(String string) { System.out.println("執(zhí)行有參構造函數(shù)"); } }
3、靜態(tài)塊
下面用static"{}"括起來的代碼片段,只會在第一次加載此類時,僅執(zhí)行一次,并且靜態(tài)塊優(yōu)先于構造塊執(zhí)行。
public class Demo { public Demo() { System.out.print("默認構造方法!-->"); } //構造代碼塊 { System.out.print("構造代碼塊!-->"); } //靜態(tài)代碼塊 static { System.out.print("靜態(tài)代碼塊!-->"); } public static void test() { { System.out.println("普通方法中的代碼塊!"); } } } public static void main(String[]args) { Demo d = new Demo(); d.test(); } /* 運行輸出結果是: 靜態(tài)代碼塊!-->構造代碼塊!-->默認構造方法!-->普通方法中的代碼塊! */
4、同步代碼塊
下面使用synchronized(obj){}括起來的代碼塊,在多線程環(huán)境下,對共享數(shù)據(jù)進行讀寫操作是需要互斥進行的,否則會導致數(shù)據(jù)的不一致。常見的是synchronized用來修飾方法,其語義是任何線程進入synchronized需要先取得對象鎖如果被占用了,則阻塞,實現(xiàn)了互斥訪問共享資源。而synchronized也是有代價的。一個常見的場景是,一個冗長的方法中,其實只有一小段代碼需要訪問共享資源,這時使用同步塊,就只將這小段代碼寫在synchronized block,既能夠實現(xiàn)同步訪問,也能夠減少同步引入的開銷。 同步代碼塊須寫在方法中。
class Ticket implements Runnable //extends Thread { object obj=new object();//共享對象,用來記錄是否有其它進程在訪問 private static int tick=100; public void run() /*不能在這寫同步函數(shù),否則其它線程用不了,需要單獨寫一個同步函數(shù)*/ { while(true) { synchronized(obj) { if(tick>0) { try { Thread.sleep(10); /*每次運行就沉睡一下*/ } catch(Exception e) { } System.out.println(Thread.currentThread().getName()+"sale:--"+tick--); } } } } }
到此這篇關于Java編程中的4種代碼塊詳解的文章就介紹到這了,更多相關Java中的四種代碼塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java中ReentrantLock和ReentrantReadWriteLock的原理
這篇文章主要介紹了Java中ReentrantLock和ReentrantReadWriteLock的原理,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-09-09springboot啟動報錯:application?startup?failed問題
這篇文章主要介紹了springboot啟動報錯:application?startup?failed問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07Java AbstractMethodError原因案例詳解
這篇文章主要介紹了Java AbstractMethodError原因案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08