📜  Java中的final最终变量

📅  最后修改于: 2020-02-12 15:00:21             🧑  作者: Mango

Java中的最终变量final只能分配一次值,我们可以在声明中或以后分配值。

final int i = 10;
i = 30; // 报错,因为i是final变量.

一个blank final在Java变量是final,该声明中没有初始化的变量。以下是空白final的简单示例。

// 一个空白final的示例
final int i;
i = 30;

值如何分配给对象的空白final?
必须在构造函数中分配值。

// 一个Java程序,展示空白final的情况
class Test
{
    // 我们可以在如下进行初始化,也可以随后初始化
    final int i;
    Test(int x)
    {
        // 我们必须在这里初始化i,如果删除如下行,编译会报错.
        i = x;
    }
}
// 测试代码
class Main
{
    public static void main(String args[])
    {
        Test t1 = new Test(10);
        System.out.println(t1.i);
        Test t2 = new Test(20);
        System.out.println(t2.i);
    }
}

输出:

10
20

如果类中有多个构造函数或重载的构造函数,则必须在所有它们中初始化空白的最终final变量。但是,可以使用构造函数链接来初始化空白的最终变量。

// Java代码,用构造函数链接来初始化空白的final变量
class Test
{
    final public int i;
    Test(int val)    {  this.i = val;  }
    Test()
    {
        // 调用Test(int val)
        this(10);
    }
    public static void main(String[] args)
    {
        Test t1 = new Test();
        System.out.println(t1.i);
        Test t2 = new Test(20);
        System.out.println(t2.i);
    }
}

输出:

10
20

空白的最终变量用于创建不可变的对象(初始化后即无法更改其成员的对象)。