1. 程式人生 > >java中class的初始化順序

java中class的初始化順序

含有繼承的類的初始化順序:父類的靜態變數->父類的靜態塊->子類靜態變數->子類靜態初始化塊->父類變數->父類初始化塊->父類的建構函式->子類的變數->子類初始化塊->子類建構函式;(變數和初始化塊之間的先後順序根據類中的先後位置而定)

Code:
  1. publicclass InitialClassOrderTest extends InitialClassOrderBasic{   
  2. // 靜態變數
  3. publicstatic String staticField = "靜態變數";   
  4. // 變數
  5. public
     String field = "變數";   
  6. // 靜態初始化塊
  7. static {   
  8.         System.out.println(staticField);   
  9.         System.out.println("靜態初始化塊");   
  10.     }   
  11. // 初始化塊
  12.     {   
  13.         System.out.println(field);   
  14.         System.out.println("初始化塊");   
  15.     }   
  16. // 構造器
  17. public InitialClassOrderTest() {   
  18.         System.out.println("構造器");   
  19.     }   
  20. publicstaticvoid main(String[] args) {   
  21. new InitialClassOrderTest();   
  22.     }   
  23. }  
Code:
  1. publicclass InitialClassOrderBasic {   
  2. // 靜態變數
  3. publicstatic String staticField = 
    "父類靜態變數";   
  4. // 變數
  5. public String field = "父類變數";   
  6. // 靜態初始化塊
  7. static {   
  8.         System.out.println(staticField);   
  9.         System.out.println("父類靜態初始化塊");   
  10.     }   
  11. // 初始化塊
  12.     {   
  13.         System.out.println(field);   
  14.         System.out.println("父類初始化塊");   
  15.     }   
  16. // 構造器
  17. public InitialClassOrderBasic() {   
  18.         System.out.println("父類構造器");   
  19.     }   
  20. }  

 執行結果:

Code:
  1. 父類靜態變數   
  2. 父類靜態初始化塊   
  3. 靜態變數   
  4. 靜態初始化塊   
  5. 父類變數   
  6. 父類初始化塊   
  7. 父類構造器   
  8. 變數   
  9. 初始化塊   
  10. 構造器   

相關推薦

java初始順序

log 初始化 靜態變量 clas bsp 類成員變量 art 類成員 學習 1)父類靜態資源加載:靜態變量、靜態方法、靜態初始化塊   按靜態資源的定義順序來加載 2)子類靜態資源加載:同上 3)父類成員變量、成員方法、初始化塊 4)父類構造器 5)子類成員變量、成員方法

Java程序初始順序

int() 測試 subclass ini 透明 turn views 是我 輸出 1,在一個類的內部(不考慮它是另一個類的派生類):很多人認為,類的成員變量是在構造方法調用之後再初始化的,先不考慮這種觀點的正確性,先看一下下面的代碼: [java] view pl

Java初始塊和構造器的執行順序

我們都知道java中不但有構造器,還有初始化塊和靜態初始化塊的概念,今天我們就來看看他們之間的執行順序是怎樣的。 我們來看一個例子: package test; class Root { static { System.out.println("Root的靜態初始化塊"); }

java 初始,構造方法,靜態成員變數,靜態塊的載入順序

1、編譯和執行概念要搞清:編譯即javac的過程,負責將.java檔案compile成.class檔案,主要是型別、格式檢查與編譯成位元組碼檔案,而載入是指java *的過程,將.class檔案載入到記憶體中去解釋執行,即執行的時候才會有載入一說。 2、類的載

【深入理解JVM】:Java類繼承關係初始順序

Java類初始化的順序經常讓人犯迷糊,現在本文嘗試著從JVM的角度,對Java非繼承和繼承關係中類的初始化順序進行試驗,嘗試給出JVM角度的解釋。 非繼承關係中的初始化順序 對於非繼承關係,主類InitialOrderWithoutExtend中包含了靜

jvm系列學習之--Java類的初始順序

parent main方法 println () 類成員 -- sys div 開始 本文主要演示Java類的初始化順序 初始化順序 對於靜態變量、靜態初始化塊、變量、初始化塊、構造器,它們的初始化順序依次是(靜態變量、靜態初始化塊)>(變量、初始化塊)>構造器

java類的初始順序

靜態 成員 代碼 初始化順序 初始化 沒有 父類靜態 都是 nbsp 屬性、方法、構造方法和自由塊都是類中的成員,在創建類的對象時,類中各成員的執行順序:1.父類靜態成員和靜態初始化快,按在代碼中出現的順序依次執行。2.子類靜態成員和靜態初始化塊,按在代碼中出現的順序依次執

Java HashMap 初始時賦值

lec SM 解決 道理 test ack 增加 數據結構 解決辦法 1、HashMap 初始化的文藝寫法HashMap 是一種常用的數據結構,一般用來做數據字典或者 Hash 查找的容器。普通青年一般會這麽初始化:HashMap<String, S

java初始時機

java虛擬機器規範雖然沒有強制性約束在什麼時候開始類載入過程,但是對於類的初始化,虛擬機器規範則嚴格規定了有且只有四種情況必須立即對類進行初始化,遇到new、getStatic、putStatic或invokeStatic這4條位元組碼指令時,如果類沒有進行過初始化,則需要先觸發其初始化。 生成這

java基礎知識總結(二)----java程式的初始順序

Java初始化原則:① 靜態物件(變數)優先於非靜態物件(變數)  ② 父類優先於子類 ③ 按照成員變數的定義順序進行初始化. 初始化的主要順序:父類靜態變數>父類靜態程式碼塊>子類靜態變數>子類靜態程式碼塊>父類非靜態變數>父類非靜態程式碼塊>

java 構造器初始順序

在類的內部,變數定義的先後順序決定了初始化的順序。即使變數定義散佈於方法定義之中,它們仍舊會在**任何方法(包括構造器)**被呼叫之前得到初始化。 class Window { Window(i

Java初始過程

Java中變數初始化順序: 1.靜態變數在類載入時初始化 2.將分配給物件的儲存空間初始化成二進位制的0,即先將所有的非靜態成員變數初始化成0 3.如果有父類,先呼叫父類構造方法 4.按照宣告的順序呼

JAVA陣列初始時用new與不用new有區別嗎

不同於String類,String由於實現了常量池 所以new 和不new 有區別:new的話,引用變數指向堆區。不new的話,引用變數指向常量池。對於陣列的定義,初始化時用new與不用new 沒區別,

詳解Spring 如何控制2個bean初始順序

開發過程中有這樣一個場景,2個 bean 初始化邏輯中有依賴關係,需要控制二者的初始化順序。實現方式可以有多種,本文結合目前對 Spring 的理解,嘗試列出幾種思路。 場景 假設A,B兩個 bean 都需要在初始化的時候從本地磁碟讀取檔案,其中B載入的檔案,依賴A中載入的全域性配置檔案中配

java初始(建構函式和innt函式)

        先說一下什麼是初始化,就是在最開始給成員變數一個初始的值,這個時候你就會問了,既然後面還要給它賦值為什麼要給它初始化呢,不是多此一舉麼,首先這個初始化是為了防止程式執行時候出現未知的錯誤,或者bug。        初始化一般在建構函式中進行,它定義了函式的初

java靜態初始塊,例項初始塊,建構函式區別

   public class People { public static int num=0;//靜態變數 String name; static//靜態初始化塊 { System.out.println(num+":靜態初始化

java初始塊和靜態塊

java語言中的初始化塊 1、什麼是初始化塊? 在一個類中,用來對例項變數作初始化的語句塊。2、初始化塊在何時被執行? 它在每一次構造物件時被執行且比構造器先執行。3、對例項變數做初始化有三種方式? 1) 通過構造器實現初始化。 2) 在定義例項變數時就給它一個值。 3)

Java例項初始是什麼?

在這篇文章中,首先用一個例子來說明什麼是例項變數的初始化,例項初始化和靜態初始化。然後再解釋例項初始化是怎樣執行的。 1.執行順序 看看下面的類,你知道哪一個最先被執行? public class Foo { //instance variable initiali

javaclass初始順序

含有繼承的類的初始化順序:父類的靜態變數->父類的靜態塊->子類靜態變數->子類靜態初始化塊->父類變數->父類初始化塊->父類的建構函式->子類的變數->子類初始化塊->子類建構函式;(變數和初始化塊之間的先後順序根據類

淺談java成員的初始順序(一)

類被建立之後的成員的初始化順序到底是怎麼樣的? 首先 不考慮繼承 package com; public class DemoOne { /** * 關於類的初始化順序 */ //不考慮繼承結構的情況 private static int a;