Java静态代码块代码块及构造函数执行顺序
Posted sasworld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java静态代码块代码块及构造函数执行顺序相关的知识,希望对你有一定的参考价值。
根据以下程序进行分析
定义一个父类
package sas.LearnJava;
public class ExcuteOrderTest
System.out.println("我是在父类开始的普通代码块!");
public ExcuteOrderTest()
System.out.println("我是父类的无参构造函数!");
public void showSomething()
System.out.println("我是父类中定义的方法!");
static
System.out.println("我是在父类中静态的代码块!");
定义一个子类
package sas.LearnJava;
public class SubExcuteOrderTest extends ExcuteOrderTest
static
System.out.println("我是在子类中的静态代码块!");
public SubExcuteOrderTest()
System.out.println("我是子类的无参构造函数!");
@Override
public void showSomething()
System.out.println("我是子类中定义的方法!");
public static void test()
System.out.println("子类中的静态测试方法");
System.out.println("我是在子类结束的普通代码块!");
再写一个demo使用上述子类
package sas.LearnJava;
public class ExcuteOrderDemo
public static void main(String[] args)
System.out.println("创建第一个对象");
SubExcuteOrderTest subExcuteOrderTest1 = new SubExcuteOrderTest();
System.out.println("创建第二个对象");
SubExcuteOrderTest subExcuteOrderTest2 = new SubExcuteOrderTest();
创建第一个对象
我是在父类中静态的代码块!
我是在子类中的静态代码块!
我是在父类开始的普通代码块!
我是父类的无参构造函数!
我是在子类结束的普通代码块!
我是子类的无参构造函数!
创建第二个对象
我是在父类开始的普通代码块!
我是父类的无参构造函数!
我是在子类结束的普通代码块!
我是子类的无参构造函数!
从运行结果中可以几点:
- 在创建类的对象时会执行其父类中的代码块及默认的无参构造函数,然后再执行自己的代码块和构造函数
- 静态代码块、非静态代码块以及构造函数的执行顺序时确定的,与在程序中的位置无关
- 子类的静态代码块会在父类的静态代码块执行后执行
- 静态代码块只执行一次,普通代码块随着对象的创建而重新进行初始化
package sas.LearnJava;
public class ExcuteOrderDemo
public static void main(String[] args)
SubExcuteOrderTest.test();
我是在父类中静态的代码块!
我是在子类中的静态代码块!
子类中的静态测试方法
当不创建对象直接调用类的静态方法时,只会执行父类和子类中的静态代码块
以上是关于Java静态代码块代码块及构造函数执行顺序的主要内容,如果未能解决你的问题,请参考以下文章