在Java类中声明了另一个类的final类型的变量,编译时提示“java:变量 xx 未在默认构造器中初始化”。这个是为什么?
首先,要搞明白为什么使用final关键字,final相当于C++的const关键字,一旦定义不能改变:
- final的变量的值不能被改变
- final的方法不能被重写
- final的类不能被继承
所以,如果你想上面这样,就使用final。但用final修饰成员变量或局部变量时,需要注意:
- 如果和static一起使用,必须在声明时初始化???????
public class FianlTest {
private final static String s = null;
}
- 不和static一起使用,可以在声明时初始化,也可以在构造函数中赋值
public class FinalTest {
private final String b = "b";
// or
private final String c;
public FinalTest(String c) {
this.c = c;
}
}
回到我们的问题,就是这样写:
public class FinalTest {
private final Test tt;
public FinalTest(Test tt) {
this.tt = tt;
}
}
public class Test {
}
参考:
final关键字及final域的内存语义???????
|