Java中的空白决赛
Java中的 final 变量只能被赋值一次,我们可以在声明中或之后赋值。
final int i = 10;
i = 30; // Error because i is final.
Java中的空白最终变量是在声明期间未初始化的最终变量。下面是一个空白final的简单例子。
// A simple blank final example
final int i;
i = 30;
如何将值分配给对象的空白最终成员?
值必须在构造函数中赋值。
// A sample Java program to demonstrate use and
// working of blank final
class Test
{
// We can initialize here, but if we
// initialize here, then all objects get
// the same value. So we use blank final
final int i;
Test(int x)
{
// Since we have initialized above, we
// must initialize i in constructor.
// If we remove this line, we get compiler
// error.
i = x;
}
}
// Driver Code
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
如果类中有多个构造函数或重载构造函数,则必须在所有这些中初始化空白的最终变量。然而,构造函数链接可用于初始化空白的最终变量。
// A Java program to demonstrate that we can
// use constructor chaining to initialize
// final members
class Test
{
final public int i;
Test(int val) { this.i = val; }
Test()
{
// Calling 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
空白最终变量用于创建不可变对象(其成员一旦初始化就无法更改的对象)。