Java 代碼塊

來源:互聯網
上載者:User

標籤:對象   一致性   多線程   存在   訪問   建構函式   通過   string   棧記憶體   

一.簡介

1.普通代碼塊:

類中方法的方法體

2.構造代碼塊

構造塊會在建立對象時被調用,每次建立時都會被調用,優先於類建構函式執行。

3.靜態代碼塊:

用static{}包裹起來的程式碼片段,只會執行一次。靜態代碼塊優先於構造塊執行。

4.同步代碼塊:

使用synchronized(){}包裹起來的代碼塊,在多線程環境下,對共用資料的讀寫操作是需要互斥進行的,否則會導致資料的不一致性。同步代碼塊需要寫在方法中。

二.靜態代碼塊和構造代碼塊的異同點

相同點:都是JVM載入類後且在建構函式執行之前執行,在類中可定義多個,一般在代碼塊中對一些static變數進行賦值。

不同點:靜態代碼塊在非靜態代碼塊之前執行。靜態代碼塊只在第一次new時執行一次,之後不在執行。而非靜態代碼塊每new一次就執行一次。

三.示範1.普通代碼塊

普通代碼塊的存在可以將類的生命週期內只調用一次的代碼放在一起,程式調用完之後就立即銷毀,這樣可以節省棧記憶體,防止棧溢出。

普通代碼塊執行的順序是按照排列的先後順序。

public class Test1 {     public static void main(String[] args) {         {             int x = 3;             System.out.println("普通代碼塊內的變數x=" + x);         }         int x = 1;         System.out.println("主方法內的變數x=" + x);         {             int y = 7;             System.out.println("普通代碼塊內的變數y=" + y);         }     } } 

運行結果:

普通代碼塊內的變數x=3主方法內的變數x=1普通代碼塊內的變數y=7
2.構造代碼塊

直接在類中定義且沒有加static關鍵字的代碼塊稱為{}構造代碼塊。

public class Test1 {         {        System.out.println("構造代碼塊先執行~~~");    }        public Test1() {        System.out.println("建構函式再執行~~~~");    }        public static void main(String[] args) {                Test1 t = new Test1();        System.out.println("普通代碼塊最後執行~~~");    } } 

運行結果:

構造代碼塊先執行~~~建構函式再執行~~~~普通代碼塊最後執行~~~
3.靜態代碼塊

在java中使用static關鍵字聲明的代碼塊。靜態塊用於初始化類,為類的屬性初始化。每個靜態代碼塊只會執行一次。

由於JVM在載入類時會執行靜態代碼塊,所以靜態代碼塊先於主方法執行。

public class Test1 {         static String s1 = "cjj"; //靜態變數    String s2 = "吹靜靜";   //普通變數        static{//靜態變數        System.out.println("靜態代碼塊最先執行~~~" + s1);    }        {//非靜態代碼塊        System.out.println("構造代碼塊再執行~~~" + s2);    }        public Test1() {//建構函式        System.out.println("建構函式再執行~~~~");    }        public static void main(String[] args) {                Test1 t = new Test1();        System.out.println("普通代碼塊最後執行~~~");    } } 

運行結果:

靜態代碼塊最先執行~~~cjj構造代碼塊再執行~~~吹靜靜建構函式再執行~~~~普通代碼塊最後執行~~~

注意:

1.靜態代碼塊不能存在於任何方法體內。

2.靜態代碼塊不能直接存取執行個體變數和執行個體方法,需要通過類的執行個體對象來訪問

 

Java 代碼塊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.