Java类初始化

时间:2015-01-07 09:34:42

标签: java initialization

以下代码实际上做了什么?

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

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

我感觉它做了更多的事情,例如,使用被称为初始化块的方法创建一个匿名类。

任何人都可以提供解释吗?

2 个答案:

答案 0 :(得分: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 :(得分: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