在本篇文章,我将会使用一个例子展示什么是实例变量初始化块,实例初始化块和静态初始化块,然后说明在Java中实例初始化块是如何工作的。

执行顺序

查看下面的代码,你知道哪个先执行吗?

package simplejava;class Foo {// instance variable initializerString s = "abc";// constructorpublic Foo() {System.out.println("constructor called");}// static initializerstatic {System.out.println("static initializer called");}// instance initializer
    {System.out.println("instance initializer called");}
}public class Q27 {public static void main(String[] args) {new Foo();new Foo();}}

结果输出;

static initializer called
instance initializer called
constructor called
instance initializer called
constructor called

实例初始化块是如何工作的

上面的实例初始化块包含了一个打印语句。为了理解它是如何工作的,我们可以将它看成一个变量赋值语句,如b=0,这样理解起来会更简单。

int b=0,可以写成 int b; b=0;

因此,实例初始化块与实例变量初始化块基本类似。

什么时候使用实例初始化块

实例初始化块很少使用,但是在以下情况,它可以作为实例变量初始化块的替代:

  1. 初始化代码需要处理异常;
  2. 执行计算,这些计算不能通过实例变量初始化块表示;

当然,这些代码也可以写在构造方法,但是一个类如果有多个构造方法,你需要在每个构造方法重复写上这些代码。

如果使用实例初始化块,仅仅只需要写一次,无论你使用哪个构造方法创建类,它都会执行。(我认为这是一个不经常使用的概念。)

另一种情况是匿名内部类,由于其不能声明构造方法,实例初始化块非常有用。(这个地方放置日志函数是否合适?)

感谢Derhein。

实现接口的匿名类没有构造方法,因此实例初始化块替代构造方法,在对象构造期间执行各种表达式。

译文链接:http://www.programcreek.com/2011/10/java-class-instance-initializers/

什么是Java实例初始化块相关推荐

  1. [转载] Java 语言中的实例初始化块 ( IIB) 详解

    参考链接: Java中的实例初始化块(IIB) 在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详 ...

  2. java里的初始化块_[转载] Java 语言中的实例初始化块 ( IIB) 详解

    参考链接: Java中的实例初始化块(IIB) 在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详 ...

  3. Java 语言中的实例初始化块 ( IIB) 详解

    在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详细介绍下吧. Java 语言中,存在三种操作:方 ...

  4. java 初始化块_详解Java中的实例初始化块(IIB)

    在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详细介绍下吧. Java 语言中,存在三种操作:方 ...

  5. java-什么是实例初始化块?

    2019独角兽企业重金招聘Python工程师标准>>> package com.text.java; /**  * <p class="detail"> ...

  6. java中初始化块、静态初始化块和构造方法

    (所谓的初始化方法init()是另一回事, 在构造方法之后执行, 注意不要混淆) 在Java中,有两种初始化块:静态初始化块和非静态初始化块.它们都是定义在类中,用大括号{}括起来,静态代码块在大括号 ...

  7. java静态初始化块无法直接调用,关于JAVA静态初始化块,初始化块,构造器调用顺序的有关问题...

    关于JAVA静态初始化块,初始化块,构造器调用顺序的问题 一个简单的关于初始化块,静态初始化块,构造器的执行顺序的小例子,请大家参考: 父类如下: package test.jamin; /** * ...

  8. java静态初始化块的作用_Java 中的 static 使用之静态初始化块

    方法不在main函数里面不会被执行吗? public class HelloWorld { String name; // 声明变量name String sex; // 声明变量sex static ...

  9. 谁动了我的奶酪?--java实例初始化的顺序问题

    故事背景 有一天,老鼠小白发现了一个奇怪的问题,它的奶酪的生产日期被谁搞丢了,不知道奶酪是否过期,可怎么吃呀? 让我们来看看吧 import java.util.Date;public class C ...

最新文章

  1. Eclipse 小插件
  2. sscanf用法简介
  3. 编程软件python中的if用法-总结Python编程中函数的使用要点
  4. 微软推出新语言Bosque,超越结构化程序设计
  5. k8s pod内部容器_第三章 pod:运行于kubernetes中的容器
  6. sqlmap第一次打靶成功
  7. XsdGen:通过自定义Attribute与反射自动生成XSD
  8. vex夹球机器人_汕头市4名中学生获2020年VEX机器人世锦赛初中组亚军
  9. java converttobase64_Java 工具箱 | 图片-Base64 互转
  10. StringUtil字符串小工具-功能扩展
  11. MSP430G2333下位机乘法运算需要注意的一个问题
  12. GNS3 使用错误 ( Dynamips error when running command 'nio create_udp )
  13. 乱世王者服务器维护,乱世王者千变万化开服时间表_乱世王者新区开服预告_第一手游网手游开服表...
  14. matlab一维图像程序,求大神指教啊!基于图像处理的一维条码识别(MATLAB程序)...
  15. 校招软件测试面试问题总结
  16. JavaSSM-Mybatis框架使用
  17. 12.11 蜜蜂路线
  18. chai.js------使用
  19. 单选框按钮设置不可选中
  20. Unity发布小游戏(六):小游戏的运行与测试

热门文章

  1. java自己实现读写锁_关于读写锁算法的Java实现及思考
  2. idea 从svn导入多个项目_IDEA导入项目简单教程
  3. 第十六届智能车竞赛广东省线上比赛成绩汇总
  4. 为什么充电电流变化有点大
  5. 第十六届全国大学生智能汽车竞赛华东赛区 承办情况汇报
  6. 2020人工神经网络第一次作业-参考答案第二部分
  7. 人工智能创意赛复选赛成绩单
  8. 信号转换问题 | 模拟电路解决方式
  9. 历届智能车哪个组别最难,哪个竞争最激烈?
  10. linux nat span端口镜像,端口镜像span、rspan实现数据检测