学习整理——Java类初始化顺序
来源:互联网 发布:变频器编程教程软件 编辑:程序博客网 时间:2024/06/10 07:39
Java类初始化顺序是一道典型的面试笔试题目,经常会遇到。由于记忆力不好,所以总是忘记刚学习的知识,简单验证一下增加印象。
先说结论
一个类被引入以及被创建实例,类内部执行的顺序是:父类静态变量、代码块——>子类静态变量、代码块——>父类成员变量、代码块——>父类构造方法——>子类成员变量、代码块——>子类构造方法。
总结
1.所有关于静态的数据、代码需要先被执行,包括父类和子类的;
2.一个进程里同一个类的静态区域只能被执行或初始化一次,然后所有该类的实例共享该静态区域;
3.接着是类的普通成员变量、代码块,不像C/C++,Java每一个基本数据类型在声明时如果不赋值都会有默认值。如果声明了变量则在此刻得到初始化,类似于C++的初始化列表。成员变量间的初始化顺序按照类定义时的顺序执行;
4.最后就是调用对应的构造函数;
5.以上顺序,在对比父类子类时,都是先父类再子类,父类会追溯到Object类。
验证
先编写一个用作普通成员初始化的类MemberClass,该类只在构造函数里输出信息:
public class MemberClass {public MemberClass(String arg){System.out.println( arg + " class test");}}
创建一个父类FatherClass,分别加入静态代码区、普通成员变量MemberClass:
public class FatherClass {static{System.out.println("father static");}MemberClass memberTest = new MemberClass("father");public FatherClass(){System.out.println("father constructor!");}}
public class SonClass extends FatherClass{static{System.out.println("son static");}private MemberClass memberTest = new MemberClass("son");public SonClass(){System.out.println("main constructor!");}public static void main(String[] arg){SonClass sonInstance = new SonClass();}}
运行输出
father staticson staticfather class testfather constructor!son class testmain constructor!
0 0
- 学习整理——Java类初始化顺序
- java学习日记——继承初始化顺序
- Java继承 学习 && 类初始化顺序
- 【Java学习笔记】类初始化执行顺序
- JAVA学习第二篇;类初始化顺序
- 【java学习】java初始化顺序
- Java学习总结6——类加载1(类初始化顺序)
- java学习笔记----初始化顺序
- JAVA 类初始化顺序
- Java类初始化顺序
- java类初始化顺序
- java类初始化顺序
- JAVA类 初始化顺序
- java类初始化顺序
- java 类初始化顺序
- java类初始化顺序
- java类初始化顺序
- java类初始化顺序
- Android学习笔记045之MediaPlayer
- iOS背景虚化(毛玻璃效果)
- 如何在Oracle中复制表结构和表数据 【转载】
- 2016 Multi-University Training Contest 5 1003 Divide the Sequence (贪心)
- cxf生成java客户端 webservice
- 学习整理——Java类初始化顺序
- 十个热门开源深度学习框架
- QCustomPlot的replot效率
- 笔记--Activity
- SpringMvc前端提交多个对象,后台接收
- ActionBarDrawerToggle
- QLabel 显示图片
- 高斯差分有什么用
- Django数据库操作