1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Java类初始化的顺序(包含非/静态对象 非/静态代码块 构造器 成员变量 父类与子类)

Java类初始化的顺序(包含非/静态对象 非/静态代码块 构造器 成员变量 父类与子类)

时间:2019-07-06 04:49:51

相关推荐

Java类初始化的顺序(包含非/静态对象 非/静态代码块 构造器 成员变量 父类与子类)

类初始化顺序遵循以下三个原则(优先级依次递减)

1、静态对象(变量)优先于非静态对象(变量)初始化,其中静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次;

2、父类优先于子类初始化;

3、成员变量按照定义先后顺序进行初始化;

例如:静态变量、非静态变量、静态代码块、非静态代码块、构造函数、父类、子类等,他们的初始化顺序是:父类静态变量 > 父类静态代码块 > 子类静态变量 > 子类静态代码块 > 父类非静态变量 > 父类非静态代码块 > 父类构造函数> 子类非静态变量 > 子类非静态代码块 > 子类构造函数。

下面给出一个不同模块初始化的初始化顺序的例子

class Base{//静态变量private static String parentParam1 = "我是父类-静态变量!";//非静态变量private String parentParam2 = "我是父类-非静态变量!";static {System.out.println("父类-静态变量是否初始化完成:parentParam1=" + parentParam1);System.out.println("父类-静态代码初始化块完成!");}{System.out.println("父类-非静态变量是否初始化完成:parentParam2=" + parentParam2);System.out.println("父类-非静态代码块初始化完成!");}public Base() {System.out.println("父类-构造函数初始化完成!");}}public class TestJavaBeanInitOrder extends Base {private static String sonParam1 = "我是子类-静态变量!";private String sonParam2 = "我是子类-非静态变量!";static {System.out.println("子类-静态变量是否初始化完成:sonParam1" + sonParam1);System.out.println("子类-静态代码块初始化完成!");}{System.out.println("子类-非静态变量是否初始化完成:sonParam2" + sonParam2);System.out.println("子类-非静态代码块初始化完成!");}public TestJavaBeanInitOrder() {System.out.println("子类-构造函数初始化完成!");}public static void main(String[] args) {new TestJavaBeanInitOrder();}}

测试结果如下:

父类-静态变量是否初始化完成:parentParam1=我是父类-静态变量!父类-静态代码初始化块完成!子类-静态变量是否初始化完成:sonParam1我是子类-静态变量!子类-静态代码块初始化完成!父类-非静态变量是否初始化完成:parentParam2=我是父类-非静态变量!父类-非静态代码块初始化完成!父类-构造函数初始化完成!子类-非静态变量是否初始化完成:sonParam2我是子类-非静态变量!子类-非静态代码块初始化完成!子类-构造函数初始化完成!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。