返回

java 类变量初始化顺序

发布时间:2023-12-01 21:02:20 211

假定有一个类定义如下:

package com.zhang;

public final class Girl {
// static代码块1
private static String sex = "female";
// 成员方法代码块1
private String name = "anonymous";

// static代码块2
static {
System.out.println("static1");
}

// 成员方法代码块3
public Girl() {
System.out.println("constructor");
}

// static代码块3
static {
System.out.println("static2");
}

// 成员方法代码块2
private int age = 18;
}

第一次加载类,并创建该类对象时,静态变量、成员变量的初始化顺序,静态代码的执行顺序是怎样的?

创建一个类对象,如果该类没有初始化,则先初始化该类(执行 clinit 方法),然后执行构造函数(init 方法),具体就是先执行 class 文件中的 static 代码块,然后再执行构造函数代码块。观察上面类的 class 文件 static 代码块:

java 类变量初始化顺序_构造函数

可以看出,static 代码块内容就是,把 static 语句按顺序搜集起来,static 变量赋值也是 static 语句,伪代码如下:

static {
sex = "female";
System.out.println("static1");
System.out.println("static2");
}

构造函数代码块:

java 类变量初始化顺序_代码块_02

对应的伪代码如下:

public Girl() {

name = "anonymous";
age = 18;
System.out.println("constructor");
}

首先执行 方法,即按顺序收集构造函数外部的语句,然后再执行构造函数内的语句。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
nacos 服务的实例变化 2023-12-01 18:03:09