博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 类初始化顺序
阅读量:4144 次
发布时间:2019-05-25

本文共 1983 字,大约阅读时间需要 6 分钟。

Java继承情况下的初始化顺序:

/** * @author xiaohao 	* @date 创建时间:Jul 31, 2017 3:50:06 PM * @version 1.0   */public class Sample {      Sample(String s)      {            System.out.println(s);      }      Sample()      {            System.out.println("Sample默认构造函数被调用");      }	}
/** * @author xiaohao 	* @date 创建时间:Jul 31, 2017 3:49:12 PM * @version 1.0   */public class Test {	static{        System.out.println("父类static块 1执行");        }	static Sample staticSam1=new Sample("父类 静态成员staticSam1初始化");	Sample sam1=new Sample("父类 sam1成员初始化");	static Sample staticSam2=new Sample("父类 静态成员staticSam2初始化");	static{        System.out.println("父类 static块 2执行");        }	Test()	{        System.out.println("父类 Test默认构造函数被调用");	}	Sample sam2=new Sample("父类 sam2成员初始化");}
/** * @author xiaohao 	* @date 创建时间:Jul 31, 2017 3:51:47 PM * @version 1.0   */public class TestSub extends Test{	static Sample staticSamSub=new Sample("子类 静态成员staticSamSub1初始化");    TestSub()    {          System.out.println("子类 TestSub 默认构造函数被调用");    }    Sample sam1=new Sample("子类 sam1成员初始化");    static Sample staticSamSub1=new Sample("子类 静态成员staticSamSub2初始化");        static{System.out.println("子类 static 块执行");}    Sample sam2=new Sample("子类 sam2成员初始化");}
/** * @author xiaohao 	* @date 创建时间:Jul 31, 2017 3:48:20 PM * @version 1.0   */public class testDemo {	public static void main(String[] args) {		// TODO Auto-generated method stub		TestSub test =new TestSub();	}}
执行结果

父类static块 1执行

父类 静态成员staticSam1初始化
父类 静态成员staticSam2初始化
父类 static块 2执行

--------------------------------父类静态成员初始化

子类 静态成员staticSamSub1初始化

子类 静态成员staticSamSub2初始化
子类 static 块执行

--------------------------------子类类静态成员初始化

父类 sam1成员初始化

父类 sam2成员初始化
父类 Test默认构造函数被调用

--------------------------------父类普通成员初始化和构造函数执行,构造方法最后被调用(不管位置多靠前)

子类 sam1成员初始化
子类 sam2成员初始化
子类 TestSub 默认构造函数被调用
--------------------------------子类普通成员初始化和构造函数执行,构造方法最后被调用(不管位置多靠前)

总结:

1 继承体系的所有静态成员初始化(先父类,后子类

2 父类初始化完成(普通成员的初始化-->构造函数的调用
3 子类初始化(普通成员-->构造函数

先父类,后子类;先静态,后普通;先成员,后构造;

你可能感兴趣的文章
C 语言 学习---复选框及列表框的使用
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
一篇搞懂Java反射机制
查看>>
Single Number II --出现一次的数(重)
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
idea的安装以及简单使用
查看>>
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>