2015-07-12 44 views
2

任何一个可以解释我这个输出是怎么来优先在Java

class Class 
{  
    { 
     System.out.println("Instance Initializer block"); 
    } 

    Class() 
    { 
     System.out.println("Default Constructor"); 
    } 

    static 
    { 
     System.out.println("Static Block"); 
    } 

    public static void main(String[] Args) 
    { 
     new Class(); 
     System.out.println("Hello world"); 
    } 
} 

输出:

Static Block 
Instance Initializer Block 
Default Constructor 
Hello World 

回答

4

静态初始化块首先执行,当类初始化,打印"Static Block"

创建实例(new Class())时,首先执行实例初始化程序块(打印"Instance Initializer Block"),然后执行构造函数(打印"Default Constructor")。

最后执行println声明的主要方法,打印"Hello World"

+0

如果我删除从“实例初始化块”大括号把它给我的错误 – Manish

+0

Sry基因生根粉逗号。 – Manish

+0

@Manish如果你删除大括号,它不再是一个实例初始化块。您不能拥有不属于任何方法或构造函数或初始化程序块的语句。 – Eran

1

的顺序是,当你尝试创建如下当JVM(类加载器)加载类(静态块称为实例创建无关)

    1. 静态初始化块正在跑实例 2.1 init块被称为 2.2然后是构造函数。
    2. 最后的print语句