有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在声明中赋值还是在构造函数中赋值?

这两者之间是否存在差异:

public class A {
    B b;
    A() {
        b=new B();
    }
}

这是:

public class A {
    B b=new B();
    A() {
    }
}

如果有,是什么?什么是更好的实践? 如果没有,推荐什么


共 (3) 个答案

  1. # 1 楼答案

    据我所知,只要你只有一个构造函数,就没有区别。如果你有多个构造函数,你需要确保它被分配到所有的构造函数中。因此,我建议采用第二种方法

  2. # 2 楼答案

    构造函数在初始化实例变量后运行,因此存在差异。在一个小例子中,这并不重要,但在更复杂的代码中,这可能很重要。(请注意,代码的顺序无关紧要。如果初始化在构造函数中,它将以秒为单位运行。)

    第二种方法更方便,所以我倾向于从它开始。不过,第一种方法可能更有用(用于控制反转和多态性),因此它通常用于“真实”代码中

    class B {
        B() {
            System.out.println("B constructor");
        }
    }
    
    public class A {
        B b=new B();
    
        A() {
            System.out.println("A constructor");
        }
        public static void main(String[] args) {
            new A();
        }
    
    }
    

    输出:

    B constructor
    A constructor
    

    class B {
        B() {
            System.out.println("B constructor");
        }
    }
    
    public class A {
        B b;
        A() {
            System.out.println("A constructor");
            b=new B();
        }
    
        public static void main(String[] args) {
            new A();
        }
    }
    

    输出:

    A constructor
    B constructor
    
  3. # 3 楼答案

    他们之间有很大的区别

    在第一个选项中,B类仅在调用不带参数的构造函数时实例化。如果您放置并调用任何参数化构造函数,则类B将不会实例化

    但在第二个选项的情况下,不管调用什么构造函数,B类都会实例化