首页 > 解决方案 > 请帮助我了解静态对象

问题描述

我写了一段关于静态对象的面向对象的代码,请帮我看看这段代码!非常感谢!类B对象创建时,先赋值a7还是先执行构造函数'public B(int i)'?我知道这段代码很复杂,非常感谢大家!

class A {
    int value;
    static A a1 = new A(1);
    public A(int i) {
        System.out.println("initialize A"+i);
        value = i;
    }

    public A(A a) {
        System.out.println("copy from A"+a.value);
        value = a.value;
    }
    static A a2 = new A(2);

}

class B {
    A a8;
    // A a7 = new A(a6);
    A a6 = new A(6);
    static A a3 = new A(3);
    static A a4;
    static {
        a4 = new A(4);
    }
    static A a5 = new A(5);

    public B(int i) {
        System.out.println("initialize B"+i);
        a8 = new A(8);
    }
    A a7 = new A(a6);
}

public class Initialization {
    static B b1 = new B(1);
    static B b2;
    public static void main(String[] args) {
        System.out.println("main begins");
        A a9 = new A(9);
        b2 = new B(2);
        System.out.println("main ends");
    }
}

标签: javaoop

解决方案


a6实例变量 (和)的初始化程序被执行,并且在构造函数的主体执行之前a7分配变量。(但在构造函数的显式或隐式“超级”调用之后。)

实例变量是在构造函数之前还是之后声明都没有关系。

这都是在JLS 12.5中指定的。JLS 是寻找有关 Java 语言语义的深层问题答案的最佳场所。


我不明白你为什么在这里问“静态对象”:

  • 对象不是static
  • 变量可以是static.
  • 方法可以static
  • 内部类可以声明为static... 但这具有相当不同的含义。

一个对象,其引用被分配给一个static变量;例如

    static B b1 = new B(1);

具有与将引用分配给实例变量或局部变量相同的语义;例如

    private B b1 = new B(1);

static不会改变对象时发生的情况new


推荐阅读