作用:在構造器之前執行的一段**,它的用處是,如果一段初始化處理**對所有物件完全相同,且無須接受任何引數,就可以把這段提取到初始化塊中。系統將在類初始化階段執行靜態初始化塊,而不是在建立物件時才執行。因此靜態初始化塊總是比普通初始化塊先執行。
程式執行順序:
所有類的靜態初始化塊(從父類自頂向下) -> 所有類的普通初始化塊然後接著類的構選器(從父類自頂向下)
**:
package com.v512.main3;
class main0
public
main0(int a)
}public
class
main
extends
main0
static
public
static
void
main(string args)
}
執行結果:
main0-static block
main-static block
main0-block
main0-costructer
main block
main-costructer
非靜態**塊:
1.可以有輸出語句。
2.可以對類的屬性、類的宣告進行初始化操作。
3.可以呼叫靜態的變數或方法。
4.若有多個非靜態的**塊,那麼按照從上到下的順序依
次執行。
5.每次建立物件的時候,都會執行一次,且先於構造器執行。
靜態**塊:
1.可以有輸出語句。
2.可以對類的屬性、類的宣告進行初始化操作。
3.不可以對非靜態的屬性初始化。即:不可以呼叫非靜態的屬
性和方法。
4.若有多個靜態的**塊,那麼按照從上到下的順序依次執行。
5.靜態**塊的執行要先於非靜態**塊。
6.靜態**塊只執行一次。
類成員初始化
在類內部 初始化的順序 靜態的成員變數 普通的成員變數 構造器的呼叫。在派生類中 初始化的順序 呼叫基類的構造器 按宣告順序呼叫成員的初始化方法 呼叫派生類構造器主體 大多數類的初始化都是按照這些順序結合在一起的。下面是乙個例子 public class test extends sub publi...
類成員初始化
一 預設呼叫的無參建構函式 include include using namespace std class studentid class student int main 8 91011class student 20 2122 intmain 執行結果 重新設計建構函式,對s物件進行初始化,...
java類的成員初始化順序和初始化塊知識
屬性 方法 構造方法和自由塊都是類中的成員,在建立類的物件時,類中各成員的執行順序 1.父類靜態成員和靜態初始化快,按在 中出現的順序依次執行。2.子類靜態成員和靜態初始化塊,按在 中出現的順序依次執行。3.父類的例項成員和例項初始化塊,按在 中出現的順序依次執行。4.執行父類的構造方法。5.子類例...