这段代码的输出是7 20。
为什么先打印7,然后打印20?
public class Television
{
private int channel = setChannel(7);
public Television(int channel)
{
this.channel = channel;
System.out.print(channel +"");
}
public int setChannel(int channel)
{
this.channel = channel;
System.out.print(channel + "");
return channel;
}
public static void main(String args[])
{
new Television(20);
}
}发布于 2014-04-24 16:16:24
创建对象时,将创建其字段。您有一个类成员:
private int channel = setChannel(7);当你这样做的时候:
new Television(20);该字段被初始化,在调用构造函数之前调用setChannel,并从那里打印7。
将创建对象的所有字段,并使用提供的值(如果未指定值,则为默认值)填充这些字段。您可以将其视为实例的准备工作。在这些成员准备好并初始化之后,将调用构造函数。
有关详细信息,请参阅JLS。
发布于 2014-04-24 16:21:11
因为这就是Java中的order of initialization。简而言之:
发布于 2014-04-24 16:23:59
答案可以在Java Language Specification中找到
在将对新创建的对象的引用作为结果返回之前,将使用以下过程处理指定的构造函数以初始化新对象:
总而言之,如果一个构造函数没有调用另一个构造函数(使用this),也没有调用任何超类构造函数(使用super),那么在执行构造函数的代码之前初始化实例变量。
https://stackoverflow.com/questions/23263369
复制相似问题