博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态代码块、非静待代码块、静态变量的执行次序
阅读量:5940 次
发布时间:2019-06-19

本文共 1441 字,大约阅读时间需要 4 分钟。

关于静态代码块、非静待代码块、静态变量的执行次序,大的问题相信大家都明白,但是最近有同学问到了如下问题,觉得难以理解其输出。其问题的代码如下:

public class StaticTest {

    public static void main(String[] args) {

        staticFunction();
    }

    static StaticTest st = new StaticTest();

    static {
        System.out.println("1");
    }
    {
        System.out.println("2");
    }

    public StaticTest() {

        System.out.println("3");
        System.out.println("a=" + a + " b=" + b);
    }

    private static void staticFunction() {

        System.out.println("4");
    }

    int a = 100;

    static int b = 112;

}

其输出为:

2

3
a=100 b=0
1
4

其实,任何问题碰到了,我们的首要任务是分解,就像上面这段代码,我们首先把这行代码注释掉:

//static StaticTest st = new StaticTest();

继而继续执行,输出为:

1

4

这个很好理解,如果类被用到,静态代码块会首先被执行,所以一般来说,静态代码块被用作与类变量(静态变量)的初始化。

接下来,我们先不分析上面的代码,先看一段其它的代码:

public class StaticTest {

    public static void main(String[] args) {
    }
    static Test01 test01 = new Test01();
}

class Test01{

    static int b = 112;
    public Test01(){
        System.out.println( "b=" + b);
    }
}

输出为多少,你一定会说,是:

b=112

完美,我们的理解没错,但是,仿佛最上面的代码就不对了,我们还原下最上面的代码:

public class StaticTest {

    public static void main(String[] args) {
    }
    public StaticTest(){
        System.out.println( "b=" + b);
    }
    static StaticTest test01 = new StaticTest();
    static int b = 112;
}

输出为:

b=0

我觉得如果这个时候我们还不能理解的话,我们稍稍改变下代码的位置:

static int b = 112;

static StaticTest test01 = new StaticTest();

输出结果为112;

所以把最开始的那段代码中b的定义移到st的上面一行,

static int b = 112;

static StaticTest st = new StaticTest();

输出就变为:

2

3
a=100 b=112
1
4

因为b和st都是静态变量,它们之间还有个先来后到的次序。

剩下的,应该都是很好理解的了。

转载于:https://www.cnblogs.com/luminji/p/7323723.html

你可能感兴趣的文章
Android开发之生成自己的签名文件及App签名打包
查看>>
如何提高阿里云上应用的可用性(二)
查看>>
云宏WinCloud前端工程师告诉你什么是UI扁平化
查看>>
如何压缩PDF文件,有什么简单的方法
查看>>
SpringMVC常用注解标签详解
查看>>
day18 Set集合
查看>>
Oracle event之db file read
查看>>
ORA 00600 [ktrexc_1]
查看>>
Docker 安装
查看>>
查询文件系统容量与每个目录的容量
查看>>
如何确定一个网站是用Wordpress开发的
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
wdcp 安装
查看>>
C语言运算符优先级相关问题
查看>>
MP4视频播放器代码
查看>>
Nginx 匹配 iphone Android 微信
查看>>
ldap
查看>>
我的友情链接
查看>>
Yum软件仓库配置
查看>>