Java 中对象的初始化

Initialization of object in Java

我正在 Java 中学习一些基本的 OOP 概念。考虑以下代码片段:

class my_class{
    int a;
    public my_class() {
    System.out.print(a+" ");
    a = 10;
    System.out.print(a);
    }
}
class Main{
    public static void main(String[] args) {
    my_class my_object = new my_class();
    }
}

以下代码的输出为:0 10

据我了解:

  1. my_class 是 class
  2. 的名称
  3. my_object是我正在创建的对象的引用
  4. new 运算符分配内存,returns 它的地址存储在 my_object
  5. my_class() 是构造函数,它使用默认值 0 初始化对象的字段,然后为其分配 10

现在考虑代码:

class my_class{
    final int a;
    public my_class() {
    a=10;
    System.out.print(a);
    }
}
class Main{
    public static void main(String[] args) {
    my_class my_object = new my_class();
    }
}

根据我之前的理解,它应该创建 my_object 并将字段 final int a 设置为默认值 0,这应该是不可更改的,并在 a=10; 处标记错误,但它可以工作并且打印输出:10

我哪里错了?

您可以对任何 final 字段进行一次初始化,可以在构造函数(即每个构造函数一次)中,也可以在其声明中初始化。

(值得注意的是,如果您希望构造函数的参数在最终变量的值中发挥作用,您必须在构造函数中对其进行初始化——否则最终变量将毫无用处!)