程式碼塊呼叫順序
研究問題:
- 主方法中靜態程式碼塊、構造程式碼塊、構造方法順序?
要點:
- A:靜態程式碼塊->main方法->構造程式碼塊->構造方法
B:靜態內容隨著類的載入而載入,靜態程式碼塊會優先執行
C:若存在繼承關係,子類初始化之前先會進行父類初始化 - super僅僅表示先初始化父類資料,再初始化子類資料
- 構造塊:直接在類中定義且沒有加static關鍵字的程式碼塊稱為{}構造程式碼塊。構造程式碼塊在建立物件時被呼叫,每次建立物件都會被呼叫,並且構造程式碼塊的執行次序優先於類建構函式。
截圖展示區:
- 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();
}
}
執行結果:
- //靜態程式碼塊:在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方法&