是什么下面的代码实际上做?Java类初始化
MyClass desc = new MyClass(){
{
setName("A");
setAge(20);
}
};
它只是创建MyClass实例,然后调用它的内部方法吗?
我有一种感觉,它更多的东西,比如,创建一个称为初始化块的方法的匿名类。
任何人都可以提供解释?
是什么下面的代码实际上做?Java类初始化
MyClass desc = new MyClass(){
{
setName("A");
setAge(20);
}
};
它只是创建MyClass实例,然后调用它的内部方法吗?
我有一种感觉,它更多的东西,比如,创建一个称为初始化块的方法的匿名类。
任何人都可以提供解释?
此代码创建一个匿名子类的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();
因为实例初始化块被复制到类的每个构造的开始。
它只是创建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.
http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html – Maroun