首页 新闻 会员 周边 捐助

java的初始化

0
[已关闭问题] 关闭于 2025-12-05 22:42
public class Person {
    private String name = "default";   // (A) 显式初始化
    private int age;                   // (B) 无显式初始化

    public Person(String name) {
        this.name = name;              // (C) 构造器中赋值
    }
}
*Tesla*的主页 *Tesla* | 小虾三级 | 园豆:1258
提问于:2025-12-05 17:48
< >
分享
所有回答(1)
0
字节码(javap -c Person):
复制
0: aload_0
1: invokespecial #1  // Method java/lang/Object."<init>":()V
4: aload_0
5: ldc           #2  // String Alice
7: putfield      #3  // Field name:Ljava/lang/String;
10: aload_0
11: aload_1
12: putfield      #3  // Field name:Ljava/lang/String;
15: return

invokespecial #1    调用 super()(父类构造器)
ldc + putfield    把 "Alice" 赋给 this.name(字段初始化)
aload_1 + putfield    把构造器参数 name 赋给 this.name(你的代码)

字段初始化语句 String name = "Alice"; 确实被编译器插进了构造器,
在 super() 之后、你的代码之前执行。

public Person(String name) {
    super();              // 隐式调用父类构造器
    this.name = "Alice";  // 插入字段初始化
    this.name = name;     // 你自己的构造器代码
}
*Tesla* | 园豆:1258 (小虾三级) | 2025-12-05 22:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册