2015-01-07 175 views
-1

是什么下面的代码实际上做?Java类初始化

MyClass desc = new MyClass(){ 
      { 
       setName("A"); 
       setAge(20); 
      } 
     }; 

它只是创建MyClass实例,然后调用它的内部方法吗?

我有一种感觉,它更多的东西,比如,创建一个称为初始化块的方法的匿名类。

任何人都可以提供解释?

+0

http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html – Maroun

回答

1

此代码创建一个匿名子类的MyClass的一个实例。它包含一个实例初始化块,在实例创建时执行。

它等同于:

public class SubClass extends MyClass 
{ 
    { 
     setName("A"); 
     setAge(20); 
    } 
} 

MyClass desc = new SubClass(); 

(除了事实是,这里的子类不是匿名的)。

而这个代码就相当于:

public class SubClass extends MyClass 
{ 
    public SubClass() 
    { 
     super(); 
     setName("A"); 
     setAge(20); 
    } 
} 

MyClass desc = new SubClass(); 

因为实例初始化块被复制到类的每个构造的开始。

1

它只是创建MyClass实例,然后调用其上的内部方法 ?

实例初始化块用于初始化实例数据成员。

{ 
    setName("A"); 
    setAge(20); 
} 

关于初始化块和构造函数的执行顺序有一定的规则。让我们先列出它们并通过编写一个简单的程序进行验证。

Initialization blocks run in the order they appear in the program. 
Instance initialization blocks run whenever a new instance of class is created. 

read more