【编程基础】Java初始化有何玄机?

对于Java的初始化顺序大家应该清楚,之前在网站上面有专门的讲解,大家可以通过文章下面的“查看原文”来阅读。

初始化顺序总结起来就是:

1、无继承情况的初始化顺序:

  • 静态块和静态数据按定义的先后顺序进行初始化。
  • 普通成员初始化。
  • 构造函数。

2、有继承情况的初始化顺序:

  • 父类的静态块和静态数据按定义的先后顺序进行初始化。
  • 子类的静态块和静态数据按定义的先后顺序进行初始化。
  • 父类的普通成员初始化。
  • 父类的构造函数。
  • 子类的普通成员初始化。
  • 子类的构造函数。

下面给大家看一道面试题来巩固一下:

父类A.java:

public class A { String tag = "A"; public A() { System.out.println("A is constructed tag = " + tag); printTag(); } void printTag() { System.out.println("A printTag " + tag); } }

子类B.java:

public class B extends A { String tag = "B"; public B() { System.out.println("B is constructed tag = " + tag); printTag(); } void printTag() { System.out.println("B printTag " + tag); } public static void main(String[] arg) { A a = new B(); } }

运行结果是什么呢?大家可以动手试试,根据上面总结的初始化顺序下自己手写一份答案,然后再上机试一下正确与否。答案是:

A is constructed tag = A B printTag null B is constructed tag = B B printTag B

你是否做对了呢?

对于这道题给大家的警示就是千万别在初始化函数中调用重写的方法,因为在初始化子类实例的时候必先调用父类初始化函数,如果初始化函数中有子类重写的方法就会走到子类的重载方法中,而此时子类还没有完成初始化,所以变量都是未赋值的,所以会出现上面的输出结果。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-10-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿人谷

static_cast ,reinterpret_cast

用法:static_cast < type-id > ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查...

249100
来自专栏浪淘沙

实训day04--二维数组,面向对象

2018.06.07 1.方法的签名 cn.edu360.function.Demo1.add(int ,int)

11230
来自专栏锦小年的博客

python学习笔记2.4-数据结构之列表和元组

python语言中包含的数据结构比较简单,除了简单的变量以外,还有列表(元组)、字典、集合。对于数据结构的操作一般包含四种:增、删、查、改。本文主要介绍列表(l...

20590
来自专栏积累沉淀

JavaScript对象和数组

学习要点: 1.Object类型 2.Array类型 3.对象中的方法 什么是对象,其实就是一种类型,即引用类型。而对象的值就是引用类型的实例。 一...

30650
来自专栏JavaEE

redis学习之redis基本数据类型前言:数据类型详解:

11630
来自专栏猿人谷

数组与指针

一、数组        数组是由类型名、标识符和维数组成的复合数据类型,类型名规定了存放在数组中的元素类型,维数则指定数组中包含的元素个数。        数组...

21880
来自专栏闪电gogogo的专栏

Python——正则表达式特殊符号及用法

由于正则表达式的内容比较多,所以单独写成一系列文章,主要内容是根据小甲鱼所讲的内容综合一下正则表达式的笔记。 贴上小甲鱼的《Python3 如何优雅地使用正则表...

230100
来自专栏Vamei实验室

Python基础07 函数

函数最重要的目的是方便我们重复使用相同的一段程序。 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句。 函...

21590
来自专栏锦小年的博客

python学习笔记7.3-内建模块collections

Python的内建模块collections为我们提供了一系列的优化操作,本质上就是元组、字典、集合、列表的特殊功能版。 1. namedtuple name...

23450
来自专栏xx_Cc的学习总结专栏

OC-基础总结(一)

399110

扫码关注云+社区

领取腾讯云代金券