java:变量 xx 未在默认构造器中初始化

在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域的内存语义​​​​​​​

你可能感兴趣的:(java,java)