java 类变量初始化顺序
发布时间:2023-12-01 21:02:20 205 相关标签:
假定有一个类定义如下:
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 代码块:
可以看出,static 代码块内容就是,把 static 语句按顺序搜集起来,static 变量赋值也是 static 语句,伪代码如下:
static {
sex = "female";
System.out.println("static1");
System.out.println("static2");
}
构造函数代码块:
对应的伪代码如下:
public Girl() {
name = "anonymous";
age = 18;
System.out.println("constructor");
}
首先执行 方法,即按顺序收集构造函数外部的语句,然后再执行构造函数内的语句。
文章来源: https://blog.51cto.com/u_13971860/5852836
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报