为了账号安全,请及时绑定邮箱和手机立即绑定

小白问一下:初始化代码块是怎么运行的,看下面的代码。

为什么需要实例化对象之后,初始化代码块才会执行,而静态初始化代码块不需要 实例化就可以执行

public class Demo {

    /**
     * @param args
     */
    int num1;
    int num2;
    static int num3;

    public Demo() {
        num1 = 1;
        System.out.println("构造方法块执行,num1=" + num1);
    }

    {
        num2 = 2;
        System.out.println("初始化代码块执行,num2=" + num2);
    }
    static {
        num3=3;
        System.out.println("静态初始化代码块执行,num3=" + num3);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*Demo demo=new Demo();
        System.out.println("num1="+demo.num1);
        System.out.println("num1="+demo.num2);
        System.out.println("num1="+Demo.num3);*/
    }
}

运行结果

静态初始化代码块执行,num3=3

https://img1.sycdn.imooc.com//5c75e10a0001453d12600444.jpg

正在回答

5 回答

static代码块相当于已经定了一个实例,并且他是最先执行且只执行一次的。

0 回复 有任何疑惑可以回复我~

你记住static代码块再类加载时就执行而且只执行一次就行,就像光速30万km/s就像,被开发人员设定了

0 回复 有任何疑惑可以回复我~

那是因为你下面有main方法,如果你把main方法也注释掉,运行结果就不是这个了

1 回复 有任何疑惑可以回复我~

简单的说,静态代码块,相当于已经实例化的存在,例:静态代码块代表张三这个人,有活干直接喊:“张三”;

而初始化代码块不存在,需要先new才能使用,例:初始代码块代表人,没有具体到谁,你要找人干活,要先指定)这个人是张三(new一个实例),然后再喊他干活;

6 回复 有任何疑惑可以回复我~

我也是初学者,我的理解是:静态初始化块只在类加载时执行,且只会执行一次

然后当没有实例化类的时候,他不会继续执行,实例化类Demo demo=new Demo();后,就会执行初始化块代码,然后执行构造方法。

0 回复 有任何疑惑可以回复我~
#1

猛男落泪衣

就像例子里的那段,最后又创建了一个类的对象,然后他又执行了一次初始化代码块和构造方法。
2019-02-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

小白问一下:初始化代码块是怎么运行的,看下面的代码。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信