初始化对象时构造函数如何工作?

2022-09-03 16:38:05

此代码的输出为 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);
    }
}

答案 1

创建对象时,将创建其字段。您有一个类成员:

private int channel = setChannel(7);

当您执行以下操作时:

new Television(20);

该字段在调用构造函数之前被初始化并调用,并且从那里打印7。setChannel

将创建对象的所有字段,并使用提供的值(如果未指定值,则为默认值)进行填充。您可以将其视为实例的准备工作。在这些成员准备就绪并初始化后,将调用构造函数。

有关更多详细信息,请参阅 JLS


答案 2

因为这是Java中的初始化顺序。总之:

  1. 静态成员和块
  2. 实例成员和块
  3. 构造器主体