博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java对象初始化顺序的简单验证
阅读量:5981 次
发布时间:2019-06-20

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

     以下这段小程序对调用对象构造函数时,父类构造函数、成员变量初始化函数,以及非静态初始化块调用顺序进行验证,不考虑静态成员及静态初始化块。

public class Derive extends Base {    private Member m1 = new Member("Member 1");    {        System.out.println("Initial Block()");    }    public Derive() {        System.out.println("Derive()");    }    private Member m2 = new Member("Member 2");    private int i = getInt();    private int getInt()     {        System.out.println("getInt()");        return 2;    }    public static void main(String[] args)    {        new Derive();    }}class Base{    public Base()     {        System.out.println("Base()");    }}class Member {    public Member(String m)     {        System.out.println("Member() "+m);    }}/*程序输出:Base()Member()  Member 1Initial Block()Member()  Member 2getInt()Derive()*/

 

      得出结论如下:不考虑静态成员的初始化,调用一个对象的构造函数时,程序先调用父类的构造函数(可以通过super关键字指定父类的构造函数,否则默认调用无参的构造函数,并且需要在子类的构造函数的第一行调用),之后静态成员变量的初始化函数和静态初始化块则按照在代码当中的顺序执行,成员变量如果没有指定值的话则赋予默认值,即基本数据类型为0或false等,对象则为null;最后调用自身构造函数。

 

转载于:https://www.cnblogs.com/NotOnlyAnAnswer/p/3538523.html

你可能感兴趣的文章
运维平台第一版本实现过程
查看>>
启动oracle em命令
查看>>
Android Studio 第五十六期 - Android之系统设置选项的包名
查看>>
mysql准实时同步数据到Elasticsearch
查看>>
Django+ PowerShell 管理AD系统
查看>>
MFA(Multi-Factor Authentication)应用之Outlook2013排错
查看>>
Kickstart+HTTP+DHCP+TFTP全自动批量安装部署Linux系统
查看>>
Docker学习之容器
查看>>
17.Azure备份(MARS)代理(上)
查看>>
解决MSN无法登录问题的意外收获
查看>>
不只是折腾!OS X 10.10 Yosemite 改造攻略
查看>>
演示:通过实验取证IP报文的各个字段
查看>>
C#设计模式(6)——原型模式(Prototype Pattern)
查看>>
Lync日常维护之三:客户端显示状态未更新的处理方法
查看>>
Oracle网格控制器OMA端安装Yast
查看>>
Android应用程序组件Content Provider应用实例(1)
查看>>
WinForm------TreeList加载数据方法
查看>>
hashcode(),equal()方法深入解析
查看>>
easyui datagrid 列拖动
查看>>
通过shape-outside来设置文字环绕时的形状
查看>>