初始化类

uml*_*uml 0 java initialization class object

这是Java代码的片段.

class A{
   public A() { }
   public A(int i) {   System.out.println(i );    }
}
class B{
   static A s1 = new A(1);
   A a = new A(2);
   public static void main(String[] args){
      B b = new B();
      A a = new A(3);
   }
   static A s2 = new A(4);
}
Run Code Online (Sandbox Code Playgroud)

执行顺序如下:1,4,2,3因为以这种方式执行类的初始化.但是,如果删除B b = new B();对象创建,这是否意味着该类不会按上述顺序初始化?最好的祝福

Roh*_*ain 5

如果删除B b = new B(),则(A a)不会使用实例初始化声明为实例变量的引用new A(2)

在类加载时仅加载和初始化静态变量.只有在实例化类时才会初始化实例变量.

原因是: -

A a = new A(2);
Run Code Online (Sandbox Code Playgroud)

您的上述代码转换为: -

A a;  
public B() {
    super();
    a = new A(2);
}
Run Code Online (Sandbox Code Playgroud)

由编译器.B()编译器提供的默认构造函数在哪里,因为您没有提供自己的构造函数.如果已声明自己的构造函数,则会将初始化添加到每个构造函数中.

因此,如果您没有实例化您的B类,A a则不会被初始化,因此A(int i)不会调用构造函数.

  • 数组声明? (6认同)
  • 数组声明?? (5认同)