java方法顺序执行_java中方法的执行顺序

java中方法的执行顺序:

先加载父类的静态代码块和静态变量(谁在前先加载谁)

然后加载子类的静态代码块和静态变量(谁在前先加载谁)

其次加载父类的普通方法赋值的变量和构造代码块(谁在前先加载谁)

然后加载父类的构造方法

在然后加载子类的普通方法赋值的变量和构造代码块(谁在前先加载谁)

最后加载子类的构造方法

普通方法只有在被调用的时候才会加载,默认不会加载普通方法

public class functionTest {

public static void main(String[] args){

System.out.println("运行functionTest中的main函数,创建D类实例");

new D();

}

}

class E{

E(){

System.out.println("执行E的构造函数");

}

public void funcOfE(){

System.out.println("执行E的函数");

}

}

class F{

F(){

System.out.println("执行F的构造函数");

}

public void funcOfF(){

System.out.println("执行F的函数");

}

}

class B{

E e=new E();

static F f=new F();

public String sb=getSb();

static{

System.out.println("执行B类的static块(B包含E类的成员变量,包含静态F类成员变量)");

f.funcOfF();

}

{

System.out.println("执行B实例的普通初始化块");

}

B(){

System.out.println("执行B类的构造函数(B包含E类的成员变量,包含静态F类成员变量)");

e.funcOfE();

}

public String getSb(){

System.out.println("初始化B的实例成员变量sb");

return "sb";

}

}

class C extends B{

static{

System.out.println("执行C的static块(C继承B)");

}

{

System.out.println("执行C的普通初始化块");

}

C(){

System.out.println("执行C的构造函数(C继承B)");

}

}

class D extends C{

public String sd1=getSd1();

public static String sd=getSd();

static{

System.out.println("执行D的static块(D继承C)");

}

{

System.out.println("执行D实例的普通初始化块");

}

D(){

System.out.println("执行D的构造函数(D继承C);父类B的实例成员变量sb的值为:"+sb+";本类D的static成员变量sd的值为:"+sd+";本类D的实例成员变量sd1的值是:"+sd1);

}

static public String getSd(){

System.out.println("初始化D的static成员变量sd");

return "sd";

}

public String getSd1(){

System.out.println("初始化D的实例成员变量sd1");

return "sd1";

}

}

结果:

运行functionTest中的main函数,创建D类实例

执行F的构造函数

执行B类的static块(B包含E类的成员变量,包含静态F类成员变量)

执行F的函数

执行C的static块(C继承B)

初始化D的static成员变量sd

执行D的static块(D继承C)

执行E的构造函数

初始化B的实例成员变量sb

执行B实例的普通初始化块

执行B类的构造函数(B包含E类的成员变量,包含静态F类成员变量)

执行E的函数

执行C的普通初始化块

执行C的构造函数(C继承B)

初始化D的实例成员变量sd1

执行D实例的普通初始化块

执行D的构造函数(D继承C);父类B的实例成员变量sb的值为:sb;本类D的static成员变量sd的值为:sd;本类D的实例成员变量sd1的值是:sd1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值