Java class 初始化
Java class initialization
下面的代码实际上做了什么?
MyClass desc = new MyClass(){
{
setName("A");
setAge(20);
}
};
它只是创建 MyClass 实例然后调用它的内部方法吗?
我觉得它做了更多的事情,例如,使用称为初始化块的方法创建一个匿名 class。
谁能解释一下?
此代码创建了 MyClass
的匿名子 class 的实例。它包含一个实例初始化块,该块在创建实例时执行。
相当于:
public class SubClass extends MyClass
{
{
setName("A");
setAge(20);
}
}
MyClass desc = new SubClass ();
(除了这里的 sub-class 不是匿名的)。
而这段代码等同于:
public class SubClass extends MyClass
{
public SubClass ()
{
super ();
setName("A");
setAge(20);
}
}
MyClass desc = new SubClass ();
因为实例初始化块被复制到 class 的每个构造函数的开头。
Does it simply create MyClass instance and then calls the inner
methods on it?
实例初始化块用于初始化实例数据成员。
{
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.
下面的代码实际上做了什么?
MyClass desc = new MyClass(){
{
setName("A");
setAge(20);
}
};
它只是创建 MyClass 实例然后调用它的内部方法吗?
我觉得它做了更多的事情,例如,使用称为初始化块的方法创建一个匿名 class。
谁能解释一下?
此代码创建了 MyClass
的匿名子 class 的实例。它包含一个实例初始化块,该块在创建实例时执行。
相当于:
public class SubClass extends MyClass
{
{
setName("A");
setAge(20);
}
}
MyClass desc = new SubClass ();
(除了这里的 sub-class 不是匿名的)。
而这段代码等同于:
public class SubClass extends MyClass
{
public SubClass ()
{
super ();
setName("A");
setAge(20);
}
}
MyClass desc = new SubClass ();
因为实例初始化块被复制到 class 的每个构造函数的开头。
Does it simply create MyClass instance and then calls the inner methods on it?
实例初始化块用于初始化实例数据成员。
{
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.