標籤:string this 初始化塊 靜態 new ice ext out 建立
一、靜態代碼塊
- 裡面可以有輸出語句
- 隨著類的載入而載入,而且只被載入一次
- 多個靜態代碼塊之間按照順序結構執行
- 靜態代碼塊的執行要早於非靜態代碼塊的執行。
- 靜態代碼塊中只能執行靜態結構(類屬性,類方法)
二、非靜態代碼塊
- 可以對類的屬性(靜態 & 非靜態)進行初始化操作,同時也可以調用本類聲明的方法(靜態 & 非靜態)
- 裡面可以有輸出語句
- 一個類中可以有多個非靜態代碼塊,多個代碼塊之間按照順序結構執行
- 每建立一個類的對象,非靜態代碼塊就載入一次
- 非靜態代碼塊的執行要早於構造器
注意:代碼塊如果有修飾的話,那麼只能使用static
package com.yyx.pratice;class Root { static { System.out.println("Root的靜態初始化塊"); } { System.out.println("Root的普通初始化塊"); } public Root() { System.out.println("Root的無參數的構造器"); }}class Mid extends Root { static { System.out.println("Mid的靜態初始化塊"); } { System.out.println("Mid的普通初始化塊"); } public Mid() { System.out.println("Mid的無參數的構造器"); } public Mid(String msg) { // 通過this調用同一類中重載的構造器 this(); System.out.println("Mid的帶參數構造器,其參數值:" + msg); }}class Leaf extends Mid { static { System.out.println("Leaf的靜態初始化塊"); } { System.out.println("Leaf的普通初始化塊"); } public Leaf() { // 通過super調用父類中有一個字串參數的構造器 super("尚矽谷"); System.out.println("執行Leaf的構造器"); }}public class TestLeaf { public static void main(String[] args) { new Leaf(); System.out.println(); new Leaf(); }}
運行結果:
Root的靜態初始化塊
Mid的靜態初始化塊
Leaf的靜態初始化塊
Root的普通初始化塊
Root的無參數的構造器
Mid的普通初始化塊
Mid的無參數的構造器
Mid的帶參數構造器,其參數值:尚矽谷
Leaf的普通初始化塊
執行Leaf的構造器
Root的普通初始化塊
Root的無參數的構造器
Mid的普通初始化塊
Mid的無參數的構造器
Mid的帶參數構造器,其參數值:尚矽谷
Leaf的普通初始化塊
執行Leaf的構造器
Java代碼塊