Java 在这种情况下,如何正确调用构造函数?

Java 在这种情况下,如何正确调用构造函数?,java,constructor,field,Java,Constructor,Field,我试图调用一个构造函数来正确处理3个不同的类,但我不能这样做 public class B { private final A a; public B(A a) { this.a = a; } private final C c = new C(a); } 我有一个错误“变量a可能尚未初始化”,我知道一种方法,在B构造函数中放入第二个参数并在主类B中调用它,但还有其他方法吗?这里: private final C c = new C(a); 在这里,您可以通过简单地在构造函数中

我试图调用一个构造函数来正确处理3个不同的类,但我不能这样做

public class B {

private final A a;

public B(A a) {
     this.a = a;
}
private final C c = new C(a);
}
我有一个错误“变量a可能尚未初始化”,我知道一种方法,在B构造函数中放入第二个参数并在主类B中调用它,但还有其他方法吗?

这里:

private final C c = new C(a);
在这里,您可以通过简单地在构造函数中分配
c
来避免顺序的“冲突”:

public B(A a) {
     this.a = a;
     this.c = new C(a);
}
当然,当您可以在声明中定义字段时,这会简化很多。但有时,在构造函数中执行它是不可避免的。

当然

public class B {

    private final A a;

    public B(A a) {
        this.a = a;
        c = new C(a);
    }
    private final C c;
}

您的不起作用的原因是声明中的初始值设定项在构造函数之前执行。

初始化ctor中的值

public class B {
    private final A a;
    private final C c;

    public B(final A a) {
         this.a = a;
         this.c = new C(a)
    }
}

为什么在B构造函数中需要第二个参数?只需声明
private final Cc=newc(a)只是想知道:你需要进一步的信息吗?或者你的问题被解决了(如果是的话,考虑接受一个答案)。谢谢你所有的答案!