2014-10-07 48 views
1

考虑下面的代码,这个Java程序为什么显示没有错误?

我忘了定义方法名称,只是块内的代码。

public class Demo { 

    { 
    Apple ap; 
    // Display price of Winesap. 
    System.out.println("Winesap costs " + Apple.Winesap.getPrice() 
      + " cents.\n"); 
    // Display all apples and prices. 
    System.out.println("All apple prices:"); 
    for (Apple a : Apple.values()) 
     System.out.println(a + " costs " + a.getPrice() + " cents."); 
    } 

} 

是否因为java中的块{}定义了一个范围?

Block {}用Java定义范围。每次开始一个新块时,您都会创建一个新的 范围。范围决定哪些对象对程序的其他部分可见。它也 确定这些对象的生命周期。许多其他计算机语言定义了范围的两个一般类别 :全局和本地。

+3

你刚刚问了一个答案:) – 2014-10-07 07:12:48

+1

你刚刚发布了一个答案,我们应该发布的问题。 – Maroun 2014-10-07 07:13:29

+1

它是[实例初始化块](http://stackoverflow.com/questions/3987428/what-is-an-initialization-block)([更多Oracle](http://docs.oracle.com/javase) /tutorial/java/javaOO/initial.html))。 – icza 2014-10-07 07:13:30

回答

4

你有什么有一个实例初始化,如section 8.6 of the JLS描述。

当创建实例时,它在任何构造函数的主体之前执行 - 就像字段初始值设定项一样。

相关问题