什么是Java实例初始化块
在本篇文章,我将会使用一个例子展示什么是实例变量初始化块,实例初始化块和静态初始化块,然后说明在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;
因此,实例初始化块与实例变量初始化块基本类似。
什么时候使用实例初始化块
实例初始化块很少使用,但是在以下情况,它可以作为实例变量初始化块的替代:
- 初始化代码需要处理异常;
- 执行计算,这些计算不能通过实例变量初始化块表示;
当然,这些代码也可以写在构造方法,但是一个类如果有多个构造方法,你需要在每个构造方法重复写上这些代码。
如果使用实例初始化块,仅仅只需要写一次,无论你使用哪个构造方法创建类,它都会执行。(我认为这是一个不经常使用的概念。)
另一种情况是匿名内部类,由于其不能声明构造方法,实例初始化块非常有用。(这个地方放置日志函数是否合适?)
感谢Derhein。
实现接口的匿名类没有构造方法,因此实例初始化块替代构造方法,在对象构造期间执行各种表达式。
译文链接:http://www.programcreek.com/2011/10/java-class-instance-initializers/
什么是Java实例初始化块相关推荐
- [转载] Java 语言中的实例初始化块 ( IIB) 详解
参考链接: Java中的实例初始化块(IIB) 在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详 ...
- java里的初始化块_[转载] Java 语言中的实例初始化块 ( IIB) 详解
参考链接: Java中的实例初始化块(IIB) 在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详 ...
- Java 语言中的实例初始化块 ( IIB) 详解
在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详细介绍下吧. Java 语言中,存在三种操作:方 ...
- java 初始化块_详解Java中的实例初始化块(IIB)
在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB ).不过我觉得介绍的有点简单了,于是,再写一篇文章详细介绍下吧. Java 语言中,存在三种操作:方 ...
- java-什么是实例初始化块?
2019独角兽企业重金招聘Python工程师标准>>> package com.text.java; /** * <p class="detail"> ...
- java中初始化块、静态初始化块和构造方法
(所谓的初始化方法init()是另一回事, 在构造方法之后执行, 注意不要混淆) 在Java中,有两种初始化块:静态初始化块和非静态初始化块.它们都是定义在类中,用大括号{}括起来,静态代码块在大括号 ...
- java静态初始化块无法直接调用,关于JAVA静态初始化块,初始化块,构造器调用顺序的有关问题...
关于JAVA静态初始化块,初始化块,构造器调用顺序的问题 一个简单的关于初始化块,静态初始化块,构造器的执行顺序的小例子,请大家参考: 父类如下: package test.jamin; /** * ...
- java静态初始化块的作用_Java 中的 static 使用之静态初始化块
方法不在main函数里面不会被执行吗? public class HelloWorld { String name; // 声明变量name String sex; // 声明变量sex static ...
- 谁动了我的奶酪?--java实例初始化的顺序问题
故事背景 有一天,老鼠小白发现了一个奇怪的问题,它的奶酪的生产日期被谁搞丢了,不知道奶酪是否过期,可怎么吃呀? 让我们来看看吧 import java.util.Date;public class C ...
最新文章
- Eclipse 小插件
- sscanf用法简介
- 编程软件python中的if用法-总结Python编程中函数的使用要点
- 微软推出新语言Bosque,超越结构化程序设计
- k8s pod内部容器_第三章 pod:运行于kubernetes中的容器
- sqlmap第一次打靶成功
- XsdGen:通过自定义Attribute与反射自动生成XSD
- vex夹球机器人_汕头市4名中学生获2020年VEX机器人世锦赛初中组亚军
- java converttobase64_Java 工具箱 | 图片-Base64 互转
- StringUtil字符串小工具-功能扩展
- MSP430G2333下位机乘法运算需要注意的一个问题
- GNS3 使用错误 ( Dynamips error when running command 'nio create_udp )
- 乱世王者服务器维护,乱世王者千变万化开服时间表_乱世王者新区开服预告_第一手游网手游开服表...
- matlab一维图像程序,求大神指教啊!基于图像处理的一维条码识别(MATLAB程序)...
- 校招软件测试面试问题总结
- JavaSSM-Mybatis框架使用
- 12.11 蜜蜂路线
- chai.js------使用
- 单选框按钮设置不可选中
- Unity发布小游戏(六):小游戏的运行与测试