类初始化顺序问题,final修饰属性影响加载顺序

    xiaoxiao2021-03-25  93

    测试1:

    public class Demo{ public Demo(){ System.out.println("create demo object"); } public static String str = "abcd"; static { System.out.println("init static block."); } } public class Test1{ public static void main(String... args){ String a = Demo.str; System.out.println(a); } }

    结果1:

    init static block. abcd

    测试2:

    public class Demo2{ public Demo(){ System.out.println("create demo object"); } public static final String str = "abcd"; static { System.out.println("init static block."); } } public class Test2{ public static void main(String... args){ String a = Demo.str; System.out.println(a); } }

    结果2:

    abcd

    测试3:

    public class Demo3{ public Demo(){ System.out.println("create demo object"); } public static final String str = new String("abcd"); static { System.out.println("init static block."); } } public class Test3{ public static void main(String... args){ String a = Demo.str; System.out.println(a); } }

    结果3: 编译时候不能确认a值,只有在运行时才赋予a值

    init static block. abcd

    问题: 有final和没有final修饰,初始化不一样,怎么理解??

    转载请注明原文地址: https://ju.6miu.com/read-25761.html

    最新回复(0)