天天看点

Java中实例初始化是什么? What is Instance Initializer in Java?

在这篇文章中,首先用一个例子来说明什么是实例变量的初始化,实例初始化和静态初始化。然后再解释实例初始化是怎样运行的。

1.执行顺序

看看下面的类,你知道哪一个最先被执行?

public class Foo {
 
	//instance variable initializer
	String s = "abc";
 
	//constructor
	public Foo() {
		System.out.println("constructor called");
	}
 
	//static initializer
	static {
		System.out.println("static initializer called");
	}
 
	//instance initializer
	{
		System.out.println("instance initializer called");
	}
 
	public static void main(String[] args) {
		new Foo();
		new Foo();
	}
}
输出:

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

2.Java实例初始化是怎样运行的?

上面的实例初始化包含一个print语句。要了解它是如何运行的,我们可以把它作为一个变量赋值语句(例如b = 0),那么这将不难理解。

而不是

int b = 0
           

,你可以写成

int b;
b = 0;
           

3.实例初始化什么时候有用?

使用实例初始化是罕见的,但它仍然可以成为有用的替代实例变量初始化的一个选择,如果:

(1)初始化代码必须处理异常;

(2)执行无法用实例变量初始化来的计算。

当然,这样的代码可以写在构造函数里。但是,如果一个类有多个构造函数,你就必须在每个构造函数里重复这段代码。

用实例初始化,你可以只编写一次代码,无论什么构造函数被用来创建对象,都将会被执行。(我想这只是一个概念,它没有经常被使用。)

还有一种实例初始化很有用的情况是是匿名内部类,不能声明任何构造函数。(这会是放置日志功能的一个好地方呢?)

相关文章:Object initialization in Java

原文:

What is Instance Initializer in Java?