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!

推薦閱讀: