静态代码块执行顺序

本贴最后更新于 2713 天前,其中的信息可能已经水流花落

执行顺序:静态代码块 > 构造代码块 > 构造方法

理由:静态代码块(static{})在类加载的时候执行一次。
构造代码块({}内的部分)在每一次创建对象时执行,始终在构造方法前执行。
构造方法在新建对象时调用( 就是 new 的时候 )。
注意: a.静态代码块在类加载的时候就执行,所以它的优先级高于入口 main()方法。 b.当三种形式不止一次出现,同优先级是按照先后顺序执行。

带继承的例子

public class HelloB extends HelloA {
     
     public HelloB(){
         System.out.println("B的构造方法");
     }
     {
         System.out.println("B的构造代码块");
     }
     static{
         System.out.println("B的静态代码块");
     }
     //public static HelloB hB = new HelloB();
     public static void main(String[] args){
         new HelloB();//调用B的构造方法
     }
}
 
class HelloA{
     public HelloA(){
         System.out.println("A的构造方法");
     }
     {
         System.out.println("A的构造代码块");
     }
     static{
         System.out.println("A的静态代码块");
     }
}

输出结果为:
A 的静态代码块
B 的静态代码块
A 的构造代码块
A 的构造方法
B 的构造代码块
B 的构造方法

结论

a.父类始终先调用(继承先调用父类),并且这三者之间的相对顺序始终保持不变

b.因为静态代码块在类加载时执行,所以先输出的是父类和子类的静态代码块

c.调用 B 的构造方法创建对象时,构造块和构造方法会一起按顺序执行,还是父类的先调用

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...