Java靜態代碼塊和非靜態代碼塊、類載入、構造對象的機制

來源:互聯網
上載者:User

標籤:

溫故而知新,代碼塊這東西時間一長一些東西容易忘記,比如靜態代碼塊、非靜態代碼款、靜態成員變數初始化、動態成員變數初始化、構造方法調用、類載入等等的順序機制是怎麼樣的?

話不多說了,一個例子足以說明一切:

package com.collectiontest;import org.junit.Test;public class BasicTest {@Testpublic void testBlock(){System.out.println("m1:");Mimi m1=new Mimi();System.out.println("m2:");Mimi m2=new Mimi();}}class Mimi {public static int si=0; int di=si;static{si++;System.out.println("static block1: si="+si);}{//si*=2;System.out.println("block2: si="+si+", di="+di);}static{si++;System.out.println("static block2: si="+si);}public Mimi() {di=10;System.out.println("constructor: si="+si+", di="+di);}}

執行結果:

m1:

static block1: si=1

static block2: si=2

block2: si=2, di=2

constructor: si=2, di=10

m2:

block2: si=2, di=2

constructor: si=2, di=10


這說明:靜態成員變數初始化和靜態代碼塊都是在第一次載入這個類的時候被調用的(不是main方法啟動並執行時候哦)。

執行順序是:

靜態成員變數初始化

靜態代碼塊調用

動態成員變數初始化

非靜態代碼塊調用

構造方法調用


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.