实例初始化有:实例变量初始化、实例初始化和静态初始化
1、执行顺序
下面这块代码,其执行顺序是怎么样的?
public class Main
{
String s = "abc";
public Main()
{
System.out.println("constructor called");
}
static {
System.out.println("static initializer called");
}
{
System.out.println("instance initializer called");
}
public static void main(String[] args)
{
new Main();
new Main();
}
}
输出:
static initializer called
instance initializer called
constructor called
instance initializer called
constructor called
2、java实例初始化是如何工作的?
上面的实例初始化包含一个打印语句。要理解如何工作的。我们以变量赋值语句为例
int b = 0可以写成int b; b = 0;
因此实例初始化和实例变量初始化是一样的。
3、什么时候实例初始化是有用的?
实例初始化的使用非常罕见,但是在下面两种情况下,是实例变量初始化的很好的一种替换方式。
(1)初始化代码要处理异常
(2)操作运算是不能用实例变量初始化来表示的
当然,这样的代码可以写在构造函数中,但是当有多个构造函数时,必须在每个构造函数中添加这些代码。
实例初始化,只需要写一次,不管是否用构造函数创建的对象,都会执行。另一种情况就是匿名内部类时