1. 程式人生 > >程式碼塊呼叫順序

程式碼塊呼叫順序

研究問題:

  1. 主方法中靜態程式碼塊、構造程式碼塊、構造方法順序?

要點:

  • A:靜態程式碼塊->main方法->構造程式碼塊->構造方法
    B:靜態內容隨著類的載入而載入,靜態程式碼塊會優先執行
    C:若存在繼承關係,子類初始化之前先會進行父類初始化
  • super僅僅表示先初始化父類資料,再初始化子類資料
  • 構造塊:直接在類中定義且沒有加static關鍵字的程式碼塊稱為{}構造程式碼塊。構造程式碼塊在建立物件時被呼叫,每次建立物件都會被呼叫,並且構造程式碼塊的執行次序優先於類建構函式。

截圖展示區:

  1. CODE:
package com.java.JiCheng;
/*
 * A:靜態程式碼塊->main方法->構造程式碼塊->構造方法
 * B:靜態內容隨著類的載入而載入
 * 靜態程式碼塊內容會優先執行
 * C:子類初始化之前先會進行父類初始化
 */
class FU{ public FU(){ System.out.println("父類構造被呼叫");//5 } static{ System.out.println("靜態程式碼塊FU");//1 } { System.out.println("構造程式碼塊FU");//4 } } class ZI extends FU{ public ZI(){ System.out.println("子類構造被呼叫");//7 } static{ System.out.println("靜態程式碼塊ZI"
);//2 } { System.out.println("構造程式碼塊ZI");//6 } } class SUN extends ZI{ public SUN(){ System.out.println("子類的子類還是子類構造被呼叫");//9 } static{ System.out.println("靜態程式碼塊SUN");//3 } { System.out.println("構造程式碼塊SUN");//8 } } class extend{ public
static void main(String[] args){ SUN s=new SUN(); } }

執行結果:
這裡寫圖片描述

  1. //靜態程式碼塊:在java中使用static關鍵字宣告的程式碼塊。
    //靜態塊用於初始化類,為類的屬性初始化。每個靜態程式碼塊只會執行一次。
    //由於JVM在載入類時會執行靜態程式碼塊,所以靜態程式碼塊先於主方法執行。
    //如果類中包含多個靜態程式碼塊,那麼將按照”先定義的程式碼先執行,後定義的程式碼後執行”。
    //注意:1 靜態程式碼塊不能存在於任何方法體內。
    //2 靜態程式碼塊不能直接訪問靜態例項變數和例項方法,需要通過類的例項物件來訪問。
class Code{
    {
      System.out.println("Code的構造塊");//4//6
    }

    static{
        System.out.println("Code的靜態程式碼塊");//3//每個靜態程式碼塊只加載一次
        }

    public Code(){
        System.out.println("Code的構造方法");//5//7
        }
    }

public class CodeBlock03{
     {
      System.out.println("CodeBlock03的構造塊");//8//10
     }

     static{
        System.out.println("CodeBlock03的靜態程式碼塊");//1
        }

    public CodeBlock03(){
         System.out.println("CodeBlock03的構造方法");//9//11
        }

    public static void main(String[] args){
        System.out.println("CodeBlock03的主方法");//2
        new Code();
        new Code();
        new CodeBlock03();
        new CodeBlock03();
    }
}

執行結果:
這裡寫圖片描述

相關推薦

程式碼呼叫順序

研究問題: 主方法中靜態程式碼塊、構造程式碼塊、構造方法順序? 要點: A:靜態程式碼塊->main方法->構造程式碼塊->構造方法 B:靜態內容隨著類的載入而載入,

子類和父類,靜態程式碼,程式碼呼叫順序

<![endif]--> class String ; private age { out "people static block" } System. .println( ); People() { System. .println( );

靜態屬性靜態程式碼載入順序

class A { private static String staticStr = getStaticStr(); private String str = getStr(); static { System.out.println("A的靜態塊"); } { Sy

Java中成員變數、構造方法、程式碼執行順序剖析

今天,測試了一下java中成員變數、構造方法、程式碼塊等的執行順序,程式碼如下: package com.carol.entity; /** * @author Carol Tang * @version 1.0.0 * @date 2018-09-13 10:37

靜態程式碼、構造方法、構造程式碼執行順序

有如下幾個測試類 package arithmetic; class Son extends Parent{ public Son(){ System.out.println("子類構造方法執行"); } { S

構造方法、靜態程式碼、動態程式碼執行順序

超類: public class A { public A() { System.out.println("A 類構造方法執行"); } {System.out.println("A 類動態程式碼塊執行");} static {System.out.pr

程式碼執行順序

程式碼塊 public class Hello { public static void main(String[] args) { new B(); new B(); new B();

【Java學習筆記】程式碼執行順序 2-8程式設計練習

Android零基礎入門——慕課就業班 Java面向物件——Java封裝 2-8程式設計練習 題目: 請根據效果圖以及任務要求完成程式碼。 程式參考執行效果圖如下: 任務要求: 建立類Code,類中編寫構造塊、靜態程式碼塊以及構造方法 建立C

靜態程式碼、構造程式碼與區域性程式碼順序探討

JavaSE學習過程中,筆者一直在這一塊糾結,總是理解的一知半解,靜態程式碼塊和構造程式碼塊的執行順序到底是什麼樣的,花了很久的時間,現在把我到目前為止理解的情況記錄下來 區域性程式碼塊 區域性程式碼塊就是定義用{}劃定的區域,其作用的區域在方法中,只是起到了

java構造程式碼執行順序問題

public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bun

java-程式碼以及程式碼執行順序

程式碼塊: 用{}括起來的程式碼。 根據{}的位置可以分為區域性程式碼塊:方法中,區域性位置,作用:限定變數作用範圍和生命週期。構造程式碼塊:在類中方法外(成員位置),用{}括起來的程式碼。每次呼叫構造方法執行前,都會執行構造程式碼塊, 作用:把類中不同構造方法中相同的部分

靜態變數初始化:靜態變數和靜態程式碼初始順序

在工具類中,通常會初始化一些單例變數,這些變數由於只會初始一次,並不適合放在建構函式中,因此通常選擇在靜態程式碼塊中執行,那麼在一個類中,就會涉及到靜態變數和靜態程式碼塊的初始化執行順序問題。 pu

靜態程式碼、構造器、靜態方法在類中呼叫的先後順序關係

package test; /* * 當一個類中,有靜態方法、靜態程式碼塊、構造方法時; * 如果 初始化該類,new一個物件,則會 * 1,先呼叫靜態程式碼塊; * 2. 再呼叫構造器,初始化該物件; * 3.靜態方法需要被主動顯式呼叫; * 可通過以下簡單

Java____父類、子類——構造程式碼、方法呼叫順序問題

1. 繼承的概念: 繼承在本職上是特殊——一般的關係,即常說的is-a關係。子類繼承父類,表明子類是一種特殊的父類,並且具有父類所不具有的 一些屬性或方法。 2. 繼承中的初始化順序: 從類的結構上而言,其內部可以有如下四種常見形態:屬性(包括類屬性和例項屬性)、方法(

關於靜態程式碼、非靜態程式碼、建構函式、普通成員函式的呼叫順序

import java.util.Scanner; public class HelloJava { static String name; static { System.out.println(name + "靜態程式碼塊"); } public HelloJava(Stri

Java原始碼各個程式碼的載入順序

類第一次載入時回載入靜態成員、靜態程式碼塊、成員變數、構造程式碼塊、構造方法,下面通過輸出顯示在類載入時以上成員的載入順序。 <span style="font-size:14px;">public class Test1 { public static void main(

java學習-繼承構造器、靜態程式碼、普通程式碼的執行順序

1、首先建立三個類 1.1 PPDemo.java public class PPDemo { static{ System.out.println("PPDemo static..."); } { System.ou

java中靜態變數,靜態程式碼,靜態方法,例項變數,匿名程式碼的載入順序

1. java中靜態變數,靜態程式碼塊,靜態方法,例項變數,匿名程式碼塊 在Java中,使用{}括起來的程式碼稱為程式碼塊,程式碼塊可以分為以下四種: (1)普通程式碼塊:就是類中方法的方法體 public void xxx(){ //code }

Java子類與父類中靜態程式碼、非靜態程式碼、建構函式的執行順序一覽表

子類Child繼承父類Parent Child child=new Child(); 執行順序如下: ①父類靜態程式碼塊>>②子類靜態程式碼塊>>③父類非靜態程式碼塊>>④父類建構函式>>⑤子類非靜態程式碼塊>>⑥子類

繼承中程式碼的執行順序

1.父類靜態物件,父類靜態程式碼塊 2.子類靜態物件,子類靜態程式碼塊 3.父類非靜態物件,父類非靜態程式碼塊 4.父類建構函式 5.子類非靜態物件,子類非靜態程式碼塊 6.子類建構函式   靜態成員變數、靜態程式碼塊(static 方法)>main方法&