————下课后————

结论

类的加载顺序。

(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 B

B

class A staticI"m A classclass Aclass B staticI"m B classclass B

C

class A staticclass B staticclass AI"m A class class BI"m B class

D

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原文:转载自公众号,程序员乔戈里,已获作者授权