创建对象时,是否可以初始化最终变量?

2022-09-01 22:02:39

我们怎么可能在创建对象时初始化类的最终变量?

任何人都可以解释它怎么可能?...


答案 1

必须初始化最终变量一次且仅初始化一次。对于实例变量,有三种方法可以做到这一点:

  1. 在构造函数中
  2. 在实例初始化块中。
  3. 当您声明它时

以下是所有三个示例:

public class X
{
    private final int a;
    private final int b;
    private final int c = 10;

    {
       b = 20;
    }

    public X(final int val)
    {
        a = val;
    }
}

在每种情况下,当您调用代码时,代码都会运行一次,并且无法再次调用其中任何一个,这满足了初始化一次的要求,并且每个实例只发生一次。new X(...)


答案 2

在声明期间未初始化的最终变量称为空白最终变量,必须初始化 。如果不这样做,编译器将抱怨为on all constructor either explicitly or by calling this()"final variable (name) might not be initialized".


根据维基百科

最终变量只能通过初始值设定项或赋值语句初始化一次。它不需要在声明点初始化:这称为变量。类的空白最终实例变量必须在声明它的类的每个构造函数的末尾明确赋值;类似地,必须在声明它的类的静态初始值设定项中明确分配空白的最终静态变量;否则,在这两种情况下都会发生编译时错误。"blank final"

例如。

public class Sphere {

    // pi is a universal constant, about as constant as anything can be.
    public static final double PI = 3.141592653589793;  

    public final double radius;
    public final double xPos;
    public final double yPos;
    public final double zPos;

    Sphere(double x, double y, double z, double r) {
         radius = r;
         xPos = x;
         yPos = y;
         zPos = z;
    }

    [...]
}

有关更多详细信息,请阅读 http://en.wikipedia.org/wiki/Final_(Java)的wiki页面


推荐