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

时间:2017-05-12 21:17:08

标签: java constructor static 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;
 }
}

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

3 个答案:

答案 0 :(得分:6)

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

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

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

 public A(boolean a){
     this(a, false);
 }

答案 1 :(得分: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;
 }

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

答案 2 :(得分:2)

你也可以从另一个构造函数中调用构造函数:

public class A{
    private final boolean a;
    private final boolean b;

    public A(boolean a){
        this(a,false);
    }

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