Java編程中的4種代碼塊詳解
在Java編程中,代碼塊就是指用“{}”括起來的代碼。下面看一下這四種代碼塊。
1、普通代碼塊
就是指類中方法的方法體。
public void xxx(){ //code }
2、構造塊
下面用“{}”括起來的代碼片段,構造塊在創建對象時會被調用,每次創建對象時都會被調用,並且優先於類構造函數(包括有參和無參的)執行。 構造塊中定義的變量是局部變量。
public class Client { {//構造代碼塊 System.out.println("執行構造代碼塊"); } publicClient() { System.out.println("執行無參構造函數"); } publicClient(String string) { System.out.println("執行有參構造函數"); } }
3、靜態塊
下面用static”{}”括起來的代碼片段,隻會在第一次加載此類時,僅執行一次,並且靜態塊優先於構造塊執行。
public class Demo { public Demo() { System.out.print("默認構造方法!-->"); } //構造代碼塊 { System.out.print("構造代碼塊!-->"); } //靜態代碼塊 static { System.out.print("靜態代碼塊!-->"); } public static void test() { { System.out.println("普通方法中的代碼塊!"); } } } public static void main(String[]args) { Demo d = new Demo(); d.test(); } /* 運行輸出結果是: 靜態代碼塊!-->構造代碼塊!-->默認構造方法!-->普通方法中的代碼塊! */
4、同步代碼塊
下面使用synchronized(obj){}括起來的代碼塊,在多線程環境下,對共享數據進行讀寫操作是需要互斥進行的,否則會導致數據的不一致。常見的是synchronized用來修飾方法,其語義是任何線程進入synchronized需要先取得對象鎖如果被占用瞭,則阻塞,實現瞭互斥訪問共享資源。而synchronized也是有代價的。一個常見的場景是,一個冗長的方法中,其實隻有一小段代碼需要訪問共享資源,這時使用同步塊,就隻將這小段代碼寫在synchronized block,既能夠實現同步訪問,也能夠減少同步引入的開銷。 同步代碼塊須寫在方法中。
class Ticket implements Runnable //extends Thread { object obj=new object();//共享對象,用來記錄是否有其它進程在訪問 private static int tick=100; public void run() /*不能在這寫同步函數,否則其它線程用不瞭,需要單獨寫一個同步函數*/ { 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中的四種代碼塊內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!