java中最终字段的多个构造函数

Abh*_*eet 3 java static constructor final

我在课堂上有一些最后的字段

class A {

 private final boolean a;
 private final boolean b;

 public A(boolean a){
     this.a = a;
 }

 public A(boolean a, boolean b){
     this.a = a;
     this.b = b;
 }
}
Run Code Online (Sandbox Code Playgroud)

但这会产生错误,即最终字段'b'可能尚未初始化.因此,如果在多个构造函数的情况下如何处理最终属性初始化,将会有任何帮助.如果我只有第二个构造函数,它工作正常.

Jer*_*eph 6

您可以将b初始化为默认值false.所有最终变量都应该在构造函数中初始化.

 public A(boolean a){
     this.a = a;
     this.b = false;
 }
Run Code Online (Sandbox Code Playgroud)

或者应该调用其他构造函数来初始化它们.

 public A(boolean a){
     this(a, false);
 }
Run Code Online (Sandbox Code Playgroud)


Iły*_*sov 5

问题是第一个构造函数没有初始化b,所以java不能假设任何值,标准做法是编写如下代码:

 public A(boolean a){
     this(a, DEFAULT VALUE FOR B);
 }

 public A(boolean a, boolean b){
     this.a = a;
     this.b = b;
 }
Run Code Online (Sandbox Code Playgroud)

这样你只有一个真正的构造函数,所有其他构造函数只是它的捷径