龙空技术网

「漫画」Java中的父子类的执行顺序到底是怎么一回事?

Java识堂 2557

前言:

今天小伙伴们对“javay”大致比较注意,同学们都想要分析一些“javay”的相关知识。那么小编也在网络上汇集了一些对于“javay””的相关内容,希望看官们能喜欢,姐妹们快快来学习一下吧!

————下课后————

结论

类的加载顺序。

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

标签: #javay