博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 对象成员变量初始化顺序
阅读量:4600 次
发布时间:2019-06-09

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

对象成员变量指非static的变量,static的变量一般称为类成员变量,它们伴随着类的加载而初始化。

package com.juneny.foundation;public class InitSeqOfObj {    ForSeqOfObjTest f1 = new ForSeqOfObjTest("create obj 1");    ForSeqOfObjTest f2 = new ForSeqOfObjTest("create obj 2");    public static void main(String[] args) {        InitSeqOfObj i = new InitSeqOfObj();    }}class ForSeqOfObjTest {    public ForSeqOfObjTest(String msg) {        System.out.println(msg);    }}

运行,输出信息如下:

create obj 1create obj 2

和定义的顺序保持一致。

总结

java 对象的成员变量的初始化顺序和定义的顺序一致。java 类成员的初始化顺序也遵循这个原则,先定义的先初始化,非常符合人的认知习惯。

以上只是独立的对象,如果有父类呢? 我大胆猜测一下,由于继承关系只是继承父类的接口,即方法,所以,当子类实例化时,父类的对象成员变量不会被初始化。

还是做个实验吧:

package com.juneny.foundation;class parentOfInitSeqOfObj{    ForSeqOfObjTest f1 = new ForSeqOfObjTest("Parent create obj 1");}public class InitSeqOfObj extends parentOfInitSeqOfObj{    ForSeqOfObjTest f1 = new ForSeqOfObjTest("create obj 1");    ForSeqOfObjTest f2 = new ForSeqOfObjTest("create obj 2");    public static void main(String[] args) {        InitSeqOfObj i = new InitSeqOfObj();    }}class ForSeqOfObjTest {    public ForSeqOfObjTest(String msg) {        System.out.println(msg);    }}

结果让我大跌眼镜:

Parent create obj 1create obj 1create obj 2

看来,并非是我想象的那样。不过,这也说的通。 因为毕竟父对象需要随时向子对象提供自己的变量,

super.f1

在初始化子对象的时候,同时初始化父类的成员变量,也保证了随时能向子对象提供变量引用的能力。

以上。

转载于:https://www.cnblogs.com/Rexxar/p/4821621.html

你可能感兴趣的文章
云推送注意(MSDN链接)
查看>>
IDEA 生成 jar 包
查看>>
加减乘除混合版
查看>>
linux基础6-bash shell编程
查看>>
掌握这几种微服务模式助你成为更出色的工程师
查看>>
为什么很多语言选择在JVM上实现
查看>>
CSS Reset CSS Framework
查看>>
LeetCode算法扫题系列19
查看>>
nginx获取经过层层代理后的客户端真实IP(使用正则匹配)
查看>>
YII实现dropDownList 联动事件
查看>>
为什么JavaScript里面0.1+0.2 === 0.3是false
查看>>
docker swarm集群搭建
查看>>
BZOJ 1303: [CQOI2009]中位数图 问题转化_扫描_思维
查看>>
SP1026 FAVDICE - Favorite Dice 数学期望
查看>>
NodeJS、NPM安装配置步骤(windows版本)
查看>>
【矩阵+十进制快速幂】[NOI2013]矩阵游戏
查看>>
Java一个简单的文件工具集
查看>>
蓝牙BLE扫描成功,log中打印出扫描到的设备
查看>>
React(v16.8.4)生命周期详解
查看>>
一般处理应用页中绑定方法代码段
查看>>