文档章节

Java基础-类成员初始化顺序

陶邦仁
 陶邦仁
发布于 2012/11/25 23:05
字数 558
阅读 332
收藏 6
点赞 0
评论 0

类成员包括:

静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。我们也可以通过下面的测试代码来验证这一点:

image

运行以上代码,我们会得到如下的输出结果:

1、静态变量

2、静态初始化块

3、变量

4、初始化块

5、构造器

这与上文中说的完全符合。那么对于继承情况下又会怎样呢?直接给出测试结果:

1、父类--静态变量

2、父类--静态初始化块

3、子类--静态变量

4、子类--静态初始化块

5、父类--变量

6、父类--初始化块

7、父类--构造器

8、子类--变量

9、子类--初始化块

10、子类--构造器

现在,结果已经不言自明了。大家可能会注意到一点,那就是,并不是父类完全初始化完毕后才进行子类的初始化,实际上子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成了

那么对于静态变量和静态初始化块之间、变量和初始化块之间的先后顺序又是怎样呢?是否静态变量总是先于静态初始化块,变量总是先于初始化块就被初始化了呢?实际上这取决于它们在类中出现的先后顺序。我们以静态变量和静态初始化块为例来进行说明。

image

运行上面的代码,会得到如下的结果:

1、Test--A

2、静态初始化块

3、Test--B

大家可以随意改变变量a、变量b以及静态初始化块的前后位置,就会发现输出结果随着它们在类中出现的前后顺序而改变,这就说明静态变量和静态初始化块是依照他们在类中的定义顺序进行初始化的。同样,变量和初始化块也遵循这个规律。

© 著作权归作者所有

共有 人打赏支持
陶邦仁
粉丝 1568
博文 420
码字总数 1483822
作品 0
海淀
技术主管
Initialization & Cleanup

方法重载(overload)参数为基本类型的情况 方法重载时如果一系列名字相同的方法接受的参数的类型是不一样的基本类型,那么重载方法的选择规则是,将接收的参数一级一级向上提升,直到找到合适...

meisme
2013/06/03
0
0
两道面试题,带你解析Java类加载机制

文章首发于【博客园-陈树义】,点击跳转到原文《两道面试题,带你解析Java类加载机制》 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: 请写出最后的输出字符...

陈树义
06/12
0
0
两道面试题带你解析 Java 类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ } class Father extends Grandpa{ }class Son extends Father{ }public class Initialization...

06/13
0
0
Java的初始化机制、垃圾回收机制和内存分配机制

刚才在网上看到一篇关于java初始化、垃圾回收机制和内存分配机制的文章,感觉不错,就拿来转发了,以后有空可以再看看,应该会有新的认识和新的收获。 文章: 2.1初始化顺序: [java]view p...

java_T
2013/03/17
0
0
[敏捷JAVA读书笔记-java基础部分] 第四章

一、类变量和类方法 对象是由属性和行为构成,属性对应java类中的成员变量(实例变量和类变量),行为对应类中的方法。 java类的状态是由他的成员变量的状态决定的。 在java中被声明为stati...

穿越星辰
2010/05/13
0
0
[敏捷JAVA读书笔记-java基础部分] 第四章

一、类变量和类方法 对象是由属性和行为构成,属性对应java类中的成员变量(实例变量和类变量),行为对应类中的方法。 java类的状态是由他的成员变量的状态决定的。 在java中被声明为stati...

inferrrrrr
2010/05/11
0
0
java变量,初始化快,构造函数的执行顺序

对于JAVA中类的初始化是一个很基础的问题,其中的一些问题也是易被学习者所忽略。当在编写代码的时候碰到时,常被这些问题引发的错误,感觉莫名其妙。而且现在许多大公司的面试题,对于这方面...

清风傲剑
2014/08/19
0
0
Java和Android ClassLoder对比以及Class加载过程

Java的ClassLoder的父子关系如下:Bootstrap--ExtClassClassLoader---AppClassLoader。 JVM启动时先运行启动类加载器Bottstrap,主要加载Java核心API;然后加载扩展类加载器ExtClassLoder,该...

JasmineBen
05/23
0
0
Java构造时成员初始化的陷阱(Java中的声明和初始化不是一个原子操作)

class Base { Base() { System.out.println("1"); preProcess(); } void preProcess() { System.out.println("2"); } } public class Test extends Base { public String whenAmISet = "set ......

longeremmy
2013/09/22
0
1
01 - JavaSE之基础及面向对象

JAVA基础知识 Java 是SUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门面向 Internet 的高级编程语言。 Java 虚拟机(JVM:Java Virtual Machine) JRE(Java Runtim...

fengdaoting
01/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java 复制对象有哪些方式

java 复制对象有哪些方式 Apache的 Common beanutils库 org.apache.commons.beanutils.BeanUtils.copyProperties(dest,origin); Springframework 的BeanUtil 依赖: <dependency> ......

黄威
19分钟前
1
0
1.13 单用户模式

命令 init 6 #重启,reboot或shutdown -r now init 0 #重启,poweroff 单用户模式:密码忘记情况下 主机重启,按方向键↑,选择CentOS Linux (3.10.0-514.e17.X86 64) 7 (Core),按e键编辑...

小丑鱼00
21分钟前
1
0
jstack的简单使用

公司测试反应, 一个java应用的机器,cpu始终是30%, 即使不做交易, 于是想到了之前看到的jstack文章, 实践步骤记录一下: 1, 找出java应用的进程号 ps -ef|grep 应用名|grep -v grep 2, 找出pid...

零二一七
26分钟前
1
0
崛起于Springboot2.X之项目war打包部署(18)

将springboot项目打包步骤: 1、启动类 extends SpringBootServletInitializer 2、启动类添加覆盖方法 @Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder......

木九天
35分钟前
2
0
导入CSV文件就行数据整理分析

#-*-coding:utf-8-*-import csv,os,re,mathlocalPath=input("请输入所有群文件的根目录:") #所有QQ群文件的物理根目录路径def info(): info_dic=[] dirList=os.listdi...

Kefy
41分钟前
1
0
CoreText进阶(六)-内容大小计算和自动布局

CoreText进阶(六)-内容大小计算和自动布局 其它文章: CoreText 入门(一)-文本绘制 CoreText入门(二)-绘制图片 CoreText进阶(三)-事件处理 CoreText进阶(四)-文字行数限制和显示更...

aron1992
43分钟前
1
0
一个Unity高人的博客,涉猎范围很广,深度也很深。

https://blog.csdn.net/ecidevilin/article/list/

爽歪歪ES
44分钟前
0
0
Spring Cloud Config-Git后端

EnvironmentRepository的默认实现使用Git后端,这对于管理升级和物理环境以及审核更改非常方便。要更改存储库的位置,可以在Config Server中设置“spring.cloud.config.server.git.uri”配置...

itcloud
46分钟前
1
0
centos7 卸载mysql

[root@zyf ~]# rpm -qa|grep -i mysqlmysql-community-libs-5.6.34-2.el7.x86_64mysql-community-server-5.6.34-2.el7.x86_64mysql-community-release-el7-5.noarchmysql-community-......

Yao--靠自己
55分钟前
0
0
【Spring 系列 条件注解】

Spring 提供了按条件注册Bean的功能涉及到两个组件分别是:核心接口Condition,核心注解Conditional。 1、示例说明 为了演示条件注解的效果,需要定义一个属性文件,然后根据属性文件中配置的...

HansonReal
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部