类的初始化顺序详解

前言

先声明一个常识,类域和局部变量初始化的差异如下,
局部变量不初始化会报错:
image_1clid1kt7fl1m5ma9b1bgo1c0g9.png-14.9kB

类中属性(也称域)不赋初值,默认为0,如果是引用默认为空。
image_1clid2vnjh9rec81urr1or1d69m.png-14.5kB


正题

一、类中属性按照定义的顺序初始化

我们声明一个Child类,拥有两个构造方法:
TIM截图20180823113529.png-16.2kB
我们在Main类中创建Child的两个对象:
TIM截图20180823113741.png-17.7kB
输出结果:
TIM截图20180823113844.png-9.4kB
结论:就算类中属性散乱定义在不同地方,初始化也会严格按照先后顺序执行。

二、属性的自初始化先于构造方法初始化

我们知道,构造方法的主要作用在于初始化类中的成员变量,那么它到底何时执行呢?
在这里,我们在构造函数里将child2引用指向了另一个对象:
TIM截图20180823121428.png-17.8kB
输出结果如下:
TIM截图20180823121407.png-1.9kB
我们看到,构造函数方法是后被调用的。
结论:构造函数的初始化晚于成员变量自初始化。

三、静态块和静态变量优先

静态方法又被称为类方法,静态属性被称为类域,总是最优先初始化。
静态方法初始化也有两种方法:

  1. 直接初始化
    image_1cligqpe41f177i17cp1n113fn51.png-24.3kB
    输出结果:
    image_1cligrem0gbv1rgq1gst10r4i9m5e.png-13.4kB

  2. 采用静态块统一初始化
    image_1clihbsskgq01os4ct61kvc19cs5r.png-28.7kB
    输出结果:
    image_1cligrem0gbv1rgq1gst10r4i9m5e.png-13.4kB

两种方法效果一样。但是,注意如果你静态块初始,你一定不能这么做:
image_1clihf7r8dec1r6bk06htpvc268.png-31.9kB
这样做你是访问不了静态属性的。
你可以这么理解:静态块其实相当于一个属于静态属性的初始化函数,你就算在里面定义了变量,作用周期也括号范围内。所以,你的正确做法是:在外面定义好静态类型的引用而统一在静态块中初始化。

结论:一个类中初始化顺序是:静态->类属性->构造函数。

四、继承关系中的初始化顺序

我们增加一个Parent类:
image_1clii4leg10tg1c51ob0npi1kbs75.png-18.1kB
然后让Child继承Paret类,并给Child增加一个静态块:
image_1cliih70r1bie19h11nkfbsk9mj8p.png-36.5kB
使用Main类调用Child:
image_1clii8lplusv6rs1maa1pu91ih57v.png-29.1kB
结果:
image_1cliiid2uc8a1vj01o9a1i3knho96.png-21.6kB

我们可以看到:Parent和Child的静态块先被调用,之后按照先父类后子类的顺序进行了初始化,而且静态属性只初始化一次
结论:拥有继承关系时,先是从父类到子类初始化静态属性,之后再是从父类到子类初始化非静态属性。


总结

  1. 单个类中初始化顺序:静态属性->非静态属性->构造函数
  2. 继承时初始化顺序:先从父类到子类初始化静态属性,再从父类到子类进行非静态初始工作。
  3. 静态属性都只初始化一次。

转载于:https://www.cnblogs.com/gujiewei/p/9670573.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人体反应测试仪 c语言,人体反应速度测试仪毕业设计说明

1、.第一章 课题综述1.1 课题背景速度素质是指人体进行快速运动的能力,即在单位时间内迅速完成某一动作或通过某一距离的能力。反应速度是指人体对刺激发生反应的快慢。从生理机制分析,反应快慢取决于“反射弧”的五个环节:感受器传入神经神经…

nifity scaffold gem

rails3 使用nifty文章分类:Ruby编程1. 在Gemfile中添加:gem nifty-generators2. rails g nifty:layout3. rails g nifty:scaffold survey name:stringin railscast youll see the blue background style scaffold file is done by this gem

工程师的电脑桌面

【0】【1】【2】【3】【4】【5】【6】【7】【8】【9】【10】【11】【12】【13】【14】声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。------------ END ------------转自黄工的公众号推荐阅读:专辑…

单片机控制小风扇马达c语言,模拟风扇控制电路(单片机C程序设计)

原标题:模拟风扇控制电路(单片机C程序设计)/*1、定时设置每按一下定时值在0分---2分----4分---6分----8分--10循环2、主电机工作方式有三种,A、PWM为三分之一B、PWM为二分之一 C、PWM为三分之二;3、显示第一位显示风类,第二三四位…

Jmeter JAVA请求

Jmeter Java请求 一、为什么要使用Java请求 现有的post 、 get 无法对加解密及鉴权的接口进行测试,需要进行封装,然后再请求,怎么进行封装?通常使用的方式是使用httpclient 工具类型来操作,下面举一个简单的Java自定义…

国内IT图书出版的未来之路

前面两篇文章分别阐述了国内IT图书十年来的发展之路和当前国内IT图书出版社存在的一些不足,本篇则与大家一起再分析一下国内IT图书未来的发展之路。自2009年开始,国内IT图书出版社都意识到当前国内IT图书出版市场的一些不足,纷纷进行了图书选…

我的微信群里有一个外国人

最近,不知道怎么滴,我的微信群里面多了一个外国华人,然后他在群里面分享了他在国外的生活。实话说,我不曾羡慕过在美国生活的人们,我害怕走在街上突然遇到的枪击事件,也害怕每天面对的肯德基汉堡&#xff0…

c语言 从文件读入数组,C++ 将一个文件读入数组再读出数组的方法

如下所示&#xff1a;#include#includeusing namespace std;#define MAX_PACK_SIZE 10240void main(){char filePath[256];strcpy(filePath,"F:/视频/1.mp4"); //获取路径FILE *pFile;pFilefopen(filePath,"rb");if(pFileNULL){cout<return ;}fseek(pFi…

[HDU5215]Cycle

题目大意&#xff1a;给定一张边权为1的无向图&#xff0c;问是否存在长度为奇数的环和长度为偶数的环。(n<105,m<3*105) 调都调不好的的代码 容易想到的是&#xff0c;从一个点x开始DFS&#xff0c;如果两次访问到一个点&#xff0c;这两条路径就会构成一个环 根据两次到…

第一次收到这么用心的感谢信

今天收到一个读者的感谢信心里特别暖&#xff0c;发出来给大家看看说明这很长时间的付出&#xff0c;说的很多话&#xff0c;是对别人是有帮助的&#xff0c;我也希望能够帮助到更多的人&#xff0c;希望大家有方向&#xff0c;有自己对生活的态度&#xff0c;然后坚持自己的理…

android fragment 底部菜单栏,一句话搞定Android底部导航栏,一键绑定Fragment、ViewPager...

现在大多数App都会用到底部导航栏&#xff0c;比如常见的聊天工具QQ、微信、购物App等等&#xff0c;有了底部导航栏&#xff0c;用户可以随时切换界面&#xff0c;查看不同的内容。它的实现方式也很多&#xff0c;以前大多使用TabHost来实现&#xff0c;但是现在我们有很多更好…

Http协议之报文·方法·状态码

【要点】 1. HTTP协议的主要特点2. HTTP报文的组成部分3. HTTP方法4. POST 和 GET的区别5. HTTP状态码【总结】HTTP协议的主要特点 主要特点&#xff1a;简单快速&#xff0c; 灵活&#xff0c; 无连接&#xff08;非keep-alive&#xff09;&#xff0c;无状态 每个资源URI是固…

MyEclipse 深色主题

Eclipse 是不支持主题的&#xff0c;不过可以通过导入导出perference文件来实现修改文本编辑器配色。 这里是一个深色主题&#xff0c;抓个图给大家看看&#xff1a; 下载地址&#xff1a;http://blog.codefront.net/2006/09/28/vibrant-ink-textmate-theme-for-eclipse/ 这里还…

深入理解嵌入式中重要的编程模型

大家好&#xff0c;我是写代码的篮球球痴。今天我们看一看业界一些著名的编程模型。背景模型是对事物共性的抽象&#xff0c;编程模型就是对编程的共性的抽象。什么是编程的共性呢&#xff1f;最重要的共性就是&#xff1a;程序设计时&#xff0c;代码的抽象方式、组织方式或复…

android v4包自动导入吧,android如何导入v4包的源码

1.我们导入v4包源码却发现没有导入按钮当我们调用android-support-v4.jar里面的控件的时候(这里以android.support.v4.view.ViewPager举例说明)&#xff0c;很多时候还需要查看此控件的源码&#xff0c;我们按住Ctrl键点击如下图中的ViewPager之后会出现如下提示出现这个问题的…

【floyd】【bitset】洛谷 P1841 [JSOI2007]重要的城市 题解

bitset玄学完美优化复杂度&#xff1f; 题目描述 参加jsoi冬令营的同学最近发现&#xff0c;由于南航校内修路截断了原来通向计算中心的路&#xff0c;导致去的路程比原先增加了近一公里。而食堂门前施工虽然也截断了原来通向计算中心的路&#xff0c;却没有使路程增加&#xf…

新风口下:嵌入式AI学习中较好的练手项目(附代码资料/学习视频/学习规划)...

有粉丝问我&#xff1a;“当前乃至未来5-10年&#xff0c;嵌入式开发者还有哪些风口&#xff1f;”画外音&#xff1a;风口的本质&#xff0c;其实就是一段时间的人才供需不平衡。说白了就是由于行业突变&#xff0c;敏锐的资本快速进入&#xff0c;导致短时间内行业大量扩张&a…

Windows 任务栏缩略图自定义程序[更新 Build20100830]

很久没有写一点小玩意儿了&#xff0c;今天终于有了一次机会。这个程序能够对 Windows 7 中的任务栏实时预览缩略图进行一系列个性化的调整&#xff0c;使其使用起来更炫更方便&#xff0c;避免了不方便的注册表修改操作&#xff0c;将其转化为方便图形界面&#xff0c;只需要点…

excel 如何使用android,如何使用Android操作Excel文件

这篇文章介绍如何使用Android操作Excel文件Android中操作Excel文件导出报表时主要采用开源库jxl&#xff0c;最早用在java上&#xff0c;但也可用于Android。与之类似的POI&#xff0c;因为依赖库众多&#xff0c;所以只能用于java&#xff0c;而不能用于Android。使用jxl需要在…

我接的是地啊,不,你接的是土!

作者&#xff1a;晓宇&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家&#xff08;ID&#xff1a;chiphome-dy&#xff09;1、我接地了啊&#xff0c;电子设计中&#xff0c;接地是非常重要的&#xff0c;地可不等于土&#xff0c;哈哈&#xff0c;有效的接地…