代码示例一:没有设置初始值的静态变量a
public class SpringbootApplication {
//没有设置初始值的静态变量a
static int a;
public static void main(String[] args) {
System.out.println(a);
}
}
运行结果:
这里能正常运行是因为,静态变量a在类加载的准备阶段会被做默认赋值,所以a会被默认设置为0,然后再经过初始化阶段被赋值成真正的值,由于这里没有做具体赋值,所以输出0。
代码示例二:设置了初始值的静态变量a
public class SpringbootApplication {
//设置了初始值的静态变量a
static int a = 1;
public static void main(String[] args) {
System.out.println(a);
}
}
运行结果:
这里输出赋值的结果1。
示例代码三:没有赋初始值的静态常量
public class SpringbootApplication {
//没有赋初始值的静态常量
static final int a;
public static void main(String[] args) {
System.out.println(a);
}
}
编译报错:
这里编译阶段就直接报错了,如果从逻辑上说,既然是常量,不能被修改,那肯定得给一个初始值,不然哪叫常量,而从类加载的过程来说,静态常量和静态变量有所不同,静态常量在准备阶段就会被赋值成真正被设定的初始值,不会像静态变量一样,先在准备阶段设个默认值,然后到初始化阶段再初始化一次,所以静态常量默认就是要赋初始值的,因为没有默认值给它兜底。
示例代码三:赋了初始值的静态常量
public class SpringbootApplication {
//赋了初始值的静态常量
static final int a = 0;
public static void main(String[] args) {
System.out.println(a);
}
}
运行结果:
设置了初始值后,就能够正常输出了。