以下代码实际上做了什么?
MyClass desc = new MyClass(){
{
setName("A");
setAge(20);
}
};
它只是创建MyClass实例然后调用它上面的内部方法吗?
我感觉它做了更多的事情,例如,使用被称为初始化块的方法创建一个匿名类。
任何人都可以提供解释吗?
答案 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.