首页 > 其他 > 详细

Static块和类加载顺序

时间:2019-09-03 10:25:10      阅读:75      评论:0      收藏:0      [点我收藏+]
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11451040.html 

 

版本:Java8

直接上代码:

public class StaticMain {

    public static int i = 200;

    {
        i = 100;
    }

    public static void main(String[] args){
        System.out.println(i);
    }
}

结果:

技术分享图片

 

继续上代码:

public class StaticMain {

    {
        i = 100;
    }

    public static int i = 200;

    public static void main(String[] args){
        System.out.println(i);
    }
}

结果:

技术分享图片

 

继续上代码:

public class StaticMain {

    {
        i = 100;
        System.out.println(i + " : static");
    }

    public static int i = 200;

    public static void main(String[] args){
        System.out.println(i + " : main");
    }
}

结果:

技术分享图片

 

 继续上代码:

public class StaticMain {

    public static int i = 200;

    {
        i = 100;
        System.out.println(i + " : static");
    }

    public static void main(String[] args){
        System.out.println(i + " : main");
    }
}

结果:

技术分享图片

 

 继续上代码:

public class StaticMain {

    public static int i;

    {
        i = 100;
        System.out.println(i + " : static");
    }

    public static void main(String[] args){
        System.out.println(i + " : main");
    }
}

结果:

技术分享图片

 

 继续上代码:

public class StaticMain {

    public static int i;

    {
        i = 100;
        System.out.println(StaticMain.i + " : static");
    }

    public static void main(String[] args){
        System.out.println(StaticMain.i + " : main");
    }
}

结果:

技术分享图片

 

接下来改变一下:

继续上代码:

public class StaticMain {

    public static int i;

    {
        i = 100;
        System.out.println(StaticMain.i + " : static");
    }

    public static void main(String[] args){
        StaticMain staticMain = new StaticMain();
        System.out.println(StaticMain.i + " : main");
    }
}

结果:

技术分享图片

 

 继续上代码:

public class StaticMain {

    public static int i = 200;

    {
        i = 100;
        System.out.println(StaticMain.i + " : static");
    }

    public static void main(String[] args){
        StaticMain staticMain = new StaticMain();
        System.out.println(StaticMain.i + " : main");
    }
}

结果:

技术分享图片

 

 继续上代码:

public class StaticMain {

    {
        i = 100;
        System.out.println(StaticMain.i + " : static");
    }

    public static int i = 200;

    public static void main(String[] args){
        StaticMain staticMain = new StaticMain();
        System.out.println(StaticMain.i + " : main");
    }
}

结果:

技术分享图片

 

结论: 静态块中的变量是先拿到定义再在后续拿到实际变量之后再进行后续对变量的操作的; 如果不初始化静态块所属类,静态块将不会因为他的所属类的调用而被加载.

 附:类初始化时的顺序: 

   1、类内容(静态变量、静态初始化块) => 实例内容(变量、初始化块、构造器)
   2、父类的(静态变量、静态初始化块)=> 子类的(静态变量、静态初始化块)=> 父类的(变量、初始化块、构造器)=> 子类的(变量、初始化块、构造器)

 

结束??

Static块和类加载顺序

原文:https://www.cnblogs.com/fanerwei222/p/11451040.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!