快捷搜索:  汽车  科技

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)class A static class B static class A I'm A class class B I'm B class Dclass A static I'm A class class A class B static I'm B class class B C运行下面代码,输出的结果是()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

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(1)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(2)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(3)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(4)

————下课后————

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(5)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(6)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(7)

结论

类的加载顺序。

  • (1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)
  • (2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )
  • (3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )
  • (4) 父类构造函数
  • (5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )
  • (6) 子类构造函数

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(8)

例子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 A I'm B class class B

B

class A static I'm A class class A class B static I'm B class class B

C

class A static class B static class A I'm A class class B I'm B class

D

class A static class A I'm A class class B static class B I'm B class

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(9)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(10)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(11)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(12)

例子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 Casts haha

换一下静态变量和静态代码块的执行顺序。

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(); } } 以上程序输出: haha static Casts

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(13)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(14)

例子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(); } }

以上程序输出:

haha I'm xiaoMeng I'm qiaoGeLi

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(15)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(16)

例子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 xiaoMeng haha I'm qiaoGeLi

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(17)

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(18)

结论

类的执行顺序。

  • (1)父类静态变量和静态代码块(先声明的先执行);
  • (2)子类静态变量和静态代码块(先声明的先执行);
  • (3)父类的非静态属性(变量)和非静态代码块(先声明的先执行);
  • (4)父类构造函数
  • (5)子类的非静态属性(变量)和非静态代码块(先声明的先执行);
  • (6) 子类构造函数

小萌:乔哥辛苦了,给你按摩!

java接口和抽象父类的区别(Java中的父子类的执行顺序到底是怎么一回事)(19)

这篇文章和小编写的一篇原创文章很类似,比这篇文章多了一些内容

让你清清楚楚理解Java中成员变量,代码块,构造函数的加载顺序

作者:乔戈里qgl 原文:转载自公众号,程序员乔戈里,已获作者授权

猜您喜欢: