java - 请帮助我了解静态对象
问题描述
我写了一段关于静态对象的面向对象的代码,请帮我看看这段代码!非常感谢!类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");
}
}
解决方案
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
。
推荐阅读
- php - 使用包含传递变量?
- node.js - 尝试将数据从 react.js 发布到 node.js 但似乎不起作用
- mysql - 我无法创建视图
- javascript - d3.js 可见性区域计算或如何绘制地理矩形
- python - Python DateTime 索引 - 无法删除日期 - ValueError:无法将字符串转换为时间戳
- sql-server - 启用 SQL Server 身份验证 - DSN 配置
- android - 如何在 Android Studio 中导出我的项目?
- c# - 如何从 wwwroot 返回图像?
- java - Spring Azure AD - 身份验证后获取用户的地址
- vhdl - 从数组的所有元素中减去:VHDL