没有任何方法签名的代码块

时间:2014-02-07 11:53:14

标签: java

我有一个java课程如下:

public class MyClass {

    public MyClass() {
        System.out.println("In Constuctor.");
    }

    {
        System.out.println("Where am I?");
    }

    public static void main(String[] args) {
        new MyClass();
    }
}

上述课程的输出是:

Where am I?
In Constuctor.

关于打印Where am I?

的块,我几乎没有问题
  • 为什么没有显示任何错误/警告?
  • 打印Where am I?
  • 的块的含义是什么
  • 为什么在构造函数之前执行该块?
  • 如果它是有效的语法,那么它的用途是什么?

1 个答案:

答案 0 :(得分:8)

该块称为实例初始化块。当用Java创建对象时,有一个初始化对象的命令。

  1. 将字段设置为默认初始值(0falsenull
  2. 调用对象的构造函数(但不要执行构造函数的主体)
  3. 调用超类的构造函数
  4. 使用初始值设定项和初始化块初始化字段
  5. 执行构造函数的主体
  6. 有关详细信息,请查看hereJLS 8.6

      

    如果它是有效的语法,那么它的用途是什么?

    用于初始化实例变量的即时初始化程序。您可以在声明匿名类时使用实例初始值设定项。

      

    在类中声明的实例初始化程序在执行时执行   创建了类的实例(第15.9节),如§8.8.7.1中所述。