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