您的位置:首页 > 娱乐 > 明星 > java基础之 静态代码块、实例代码块、构造方法执行顺序问题

java基础之 静态代码块、实例代码块、构造方法执行顺序问题

2024/10/12 19:23:26 来源:https://blog.csdn.net/qq_41163858/article/details/141742247  浏览:    关键词:java基础之 静态代码块、实例代码块、构造方法执行顺序问题

不含继承关系的执行顺序

静态变量 > 静态代码块 > main()方法 > 构造代码块 > 构造方法

public class Son {private static final String name = "Son AAA";static {System.out.println("static property: AAA" + name);System.out.println("son  static block");}{System.out.println("son construct block");}public Son(String name) {System.out.println("son construct method");}
}

执行结果:

static property: AAASon AAA
son static block
son construct block
son construct method

原因:
静态代码块在类的加载时候执行,由于类只加载一次,所以静态代码块只执行一次;
(静态代码块里面可能会使用静态变量、因此静态变量先于静态代码块的加载)
加载完成后执行main方法;
创建对象时才会执行构造代码块、构造方法(需要被调用,不创建对象不会执行)。
注意:构造代码块在对象一建立就运行,优于构造函数执行。
构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象(某个)初始化。
为什么构造代码块优于构造函数执行 ?
首先要理解构造代码块的作用,是给所有对象进行统一初始化,提高代码的复用率。
比如有一个Student对象,学生统一年龄是10岁,但是这个班有个插班生,年龄是11岁。这时,可以在构造代码块中默认给年龄是10,在创建“插班生”对象时候单独赋值即可。

含有继承关系的加载顺序

父类静态变量 > 父类静态代码块 > 子类静态变量 > 子类静态代码块 > 父类构造代码块 > 父类构造方法 > 子类构造代码块 > 子类构造方法。

public class Parent {private static final String name = "PARENT name";static {System.out.println("parent name " + name);System.out.println("parent static block");}{System.out.println("parent construct block");}public Parent(String name) {System.out.println("parent construct method");}}
public class Son extends Parent {private static final String name = "Son AAA";static {System.out.println("static property: AAA" + name);System.out.println("son  static block");}{System.out.println("son construct block");}public Son(String name) {super(name);System.out.println("son construct method");}
}

parent name PARENT name
parent static block
static property: AAASon AAA
son static block
parent construct block
parent construct method
son construct block
son construct method

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com