为什么必须在构造函数完成之前初始化最终变量?
public class Ex
{
final int q;
}
Run Code Online (Sandbox Code Playgroud)
当我编译这段代码时,我得到这样的错误
错误:变量q可能尚未初始化
据我所知,最终变量必须/只能初始化一次,否则编译器会抛出错误.
如果最终实例变量x未初始化,则抛出错误,但y在以下代码中保持未初始化本地变量时,我没有遇到任何错误:
import java.util.*;
public class test
{
final int x = 5;// if final variable x uninitialized, compilation error occurs
public static void main(String[] args)
{
final int y; // y is not initialized, **no error is thrown**
System.out.println("test program");
}
}
Run Code Online (Sandbox Code Playgroud) 在Effective Java中,Bloch建议在使对象不可变时使所有字段成为最终字段.
有必要这样做吗?不会只给出访问器方法使它不可变.
例如
class A {
private int x;
A (int x) {
this.x = x;
}
}
Run Code Online (Sandbox Code Playgroud)
上述类是不可变的,即使我不申报x的final吗?我错过了什么吗?
final int a=2;
final int b;
b=3;
switch(num){
case a : // Legal
case b : //Illegal
}
Run Code Online (Sandbox Code Playgroud)
情况 a是合法的,但情况 b是非法的。
谁能解释为什么?