问答详情
源自:8-10 Java 中的 static 使用之静态初始化块

什么是静态初始化块在类加载是只执行一次?

什么是静态初始化块在类加载是只执行一次?我下面最后的几行定义了一个新的对象helloo,但是我尝试打印age的时候,结果还是20。(黑体字部分)



public class HelloWorld {

    

    String name; // 声明变量name

String sex; // 声明变量sex

static int age;// 声明静态变量age

    

    // 构造方法

public HelloWorld   () { 

System.out.println("通过构造方法初始化name");

name = "tom";

}

    

    // 初始化块

System.out.println("通过初始化块初始化sex");

sex = "男";

}

    

    // 静态初始化块

    static    { 

System.out.println("通过静态初始化块初始化age");

age = 20;

}

    

public void show() {

System.out.println("姓名:" + name + ",性别:" + sex + ",年龄:" + age);

}

    

public static void main(String[] args) {

        

        // 创建对象

HelloWorld hello = new HelloWorld();

// 调用对象的show方法

        hello.show();

        HelloWorld helloo = new HelloWorld();

        System.out.println(helloo.age);

        

}

}


提问者:慕码人7406720 2020-12-30 17:15

个回答

  • 慕瓜8511740
    2020-12-30 20:28:44
    已采纳

    你创建一个对象时,相当于类的实例化,此时会对类执行一次,当你再创建一个对象时,由于静态初始化块只会执行一次,所以并不会再对类进行实例化了。你这最后面的System.out.println(helloo.age);是输出hello.age,和对类执行时不一样的。(个人看解肯能有误?)