类的初始化顺序(一)
来源:互联网 发布:税务师如何备考知乎 编辑:程序博客网 时间:2024/06/05 04:38
概述:
属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序:
1.父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
4.执行父类的构造方法。
5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
6.执行子类的构造方法。
所以一个类的执行顺序总体可以分为三类:静态成员和静态初始化块,实例成员和实例初始化块,构造方法。
首先,先举几个简单的例子。
例一:main函数调用new AA();
public class AA { private static String s = print("静态成员变量"); private String s1 = "成员变量"; static { System.out.println("静态初始化块"); } { System.out.println("初始化块"); } public AA(){ System.out.println("无参构造函数"); } private static String print(String str){ System.out.println("静态方法块"); return str; }}
结果:
静态方法块静态初始化块初始化块无参构造函数
例二:
main函数调用new son();
class Father{ static{ System. out.println("父类静态代码块初始化" ); } { System. out.println("父类代码块初始化" ); } private static String s=print(); public static String print() { System. out.println("父类静态方法" ); return "父类静态成员变量的初始化" ; } public Father() { System. out.println("父类无参构造函数初始化完成" ); show(); } public void show() { System. out.println("父类show()方法" ); }}class Son extends Father{ static{ System. out.println("子类静态代码块初始化" ); } { System. out.println("子类代码块初始化" ); } private static int i=1; private String s="子类私有成员变量" ; public void show() { System. out.println("子类show()方法:i=" +i); } public Son() { System. out.println("子类构造函数初始化完成" ); show(); }}
结果:
父类静态代码块初始化父类静态方法子类静态代码块初始化父类代码块初始化父类无参构造函数初始化完成子类show()方法:i=1子类代码块初始化子类构造函数初始化完成子类成员变量初始化完成:s=子类私有成员变量子类show()方法:i=1
注意:父类的构造函数中show()实际调用的应该是子类的show方法。
阅读全文
0 0
- 类的初始化顺序(一)
- 一、java类初始化顺序(转)
- 类的初始化顺序
- 类的初始化顺序
- 类的初始化顺序
- 类的初始化顺序
- 类的初始化顺序
- 类初始化的顺序
- 类的初始化顺序
- 类的初始化顺序
- 类的初始化顺序
- 类的初始化顺序
- 类的初始化顺序
- 类的初始化顺序
- 类的初始化顺序
- 类的初始化顺序
- 类的初始化顺序
- 类初始化的顺序
- c++取模运算/求余运算
- vb.net 教程 4-3 文件操作 FileInfo 2
- IntelliJ IDEA 安装插件 (vue)
- 垃圾回收参数
- “盛大游戏杯”—K 购买装备
- 类的初始化顺序(一)
- Materail Design 入门(十)—— RecyclerView的使用(二)万能分隔线
- 浅谈android、web混合开发
- Matlab中插值函数汇总和使用说明
- 最长单调递增子序列的长度
- 数据结构:(更新中)成员变量、成员函数和实例一般命名和定义方法
- 博客记录学习过程--win10与Ubuntu16.10双系统
- 好的面试是一次自我修行
- Oracle 查询出来的数据取第一条