测试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修饰,初始化不一样,怎么理解??
