java - 初始化类

标签 java class object initialization

这是 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);
}

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

最佳答案

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

在类加载时仅加载并初始化静态变量。实例变量仅在实例化类时才初始化。

原因是:-

A a = new A(2);

您的上述代码将转换为:-

A a;  
public B() {
    super();
    a = new A(2);
}

由编译器执行。其中 B() 是编译器提供的默认构造函数,因为您没有提供自己的构造函数。如果您声明了自己的构造函数,则初始化将添加到每个构造函数中。

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

关于java - 初始化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278500/

相关文章:

java - 为什么我在 Eclipse 控制台和调试器中都看不到 Java char 数组中的内容?

javascript - 通过jquery悬停切换标签,添加删除类{显示:none}

javascript - JS 按数组中日期值(对象)的月份分组

css - 我可以将 2 种以上的样式组合成一个超样式吗?

python - 类实例变量继承和类变量继承

javascript - 将 JavaScript 数组转换为对象

java - 这个和类名的区别

java - Camel <packageScan> 不工作?

java - 如果我们不在 Java 中序列化对象会发生什么?

java - 当我启动 Spring 服务器时,在浏览器或 postman 中访问 url 时出现 404