java类初始化顺序_「漫画」Java中的父子类的执行顺序到底是怎么一回事?
生活随笔
收集整理的這篇文章主要介紹了
java类初始化顺序_「漫画」Java中的父子类的执行顺序到底是怎么一回事?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
————下課后————
結論
類的加載順序。
- (1) 父類靜態代碼塊(包括靜態初始化塊,靜態屬性,但不包括靜態方法)
- (2) 子類靜態代碼塊(包括靜態初始化塊,靜態屬性,但不包括靜態方法 )
- (3) 父類非靜態代碼塊( 包括非靜態初始化塊,非靜態屬性 )
- (4) 父類構造函數
- (5) 子類非靜態代碼塊 ( 包括非靜態初始化塊,非靜態屬性 )
- (6) 子類構造函數
例子1
運行下面代碼,輸出的結果是()
class A { public A() {//構造函數 System.out.println("class A"); } { //代碼塊 System.out.println("I'm A class"); } static { //靜態代碼塊 System.out.println("class A static"); }}public class B extends A { public B() {//構造函數 System.out.println("class B"); } { //代碼塊 System.out.println("I'm B class"); } static { System.out.println("class B static"); } //靜態代碼塊 public static void main(String[] args) { new B(); }}A
class A static class B static I'm A class class AI'm B class class BB
class A staticI'm A classclass Aclass B staticI'm B classclass BC
class A staticclass B staticclass AI'm A class class BI'm B classD
class A staticclass AI'm A classclass B staticclass BI'm B class例子2
class Print{ Print(){ System.out.println("haha"); }}public class Cats { static { System.out.println("static Casts"); } static Print test1 = new Print();}class qiaoGeli extends Cats{ public static void main(String [] args) { qiaoGeli t1 = new qiaoGeli(); }}以上程序輸出:
static Castshaha換一下靜態變量和靜態代碼塊的執行順序。
class Print{ Print(){ System.out.println("haha"); }}public class Cats { static Print test1 = new Print(); static { System.out.println("static Casts"); }}class qiaoGeli extends Cats{ public static void main(String [] args) { qiaoGeli t1 = new qiaoGeli(); }}以上程序輸出:hahastatic Casts例子3
class Print{ Print(){ System.out.println("haha"); }}public class Cats { Print test = new Print(); Cats(){ System.out.println("I'm qiaoGeLi"); } { System.out.println("I'm xiaoMeng"); } public static void main(String [] args) { Cats cat = new Cats(); }}以上程序輸出:
hahaI'm xiaoMengI'm qiaoGeLi例子4
class Print{ Print(){ System.out.println("haha"); }}public class Cats { Cats(){ System.out.println("I'm qiaoGeLi"); } { System.out.println("I'm xiaoMeng"); } Print test = new Print(); public static void main(String [] args) { Cats cat = new Cats(); }}以上程序輸出:
I'm xiaoMenghahaI'm qiaoGeLi結論
類的執行順序。
- (1)父類靜態變量和靜態代碼塊(先聲明的先執行);
- (2)子類靜態變量和靜態代碼塊(先聲明的先執行);
- (3)父類的非靜態屬性(變量)和非靜態代碼塊(先聲明的先執行);
- (4)父類構造函數
- (5)子類的非靜態屬性(變量)和非靜態代碼塊(先聲明的先執行);
- (6) 子類構造函數
小萌:喬哥辛苦了,給你按摩!
這篇文章和小編寫的一篇原創文章很類似,比這篇文章多了一些內容
讓你清清楚楚理解Java中成員變量,代碼塊,構造函數的加載順序
作者:喬戈里qgl原文:轉載自公眾號,程序員喬戈里,已獲作者授權總結
以上是生活随笔為你收集整理的java类初始化顺序_「漫画」Java中的父子类的执行顺序到底是怎么一回事?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 类对接口的实现不叫继承_Java多态的实
- 下一篇: js浮点数运算不精确 如何解决_解决 浏