这三条都具备,那么public final int MAX=52; 这个就是定义了一个编译时常量。也就是说,没有static也可能是编译时常量。
而即使带着static final,也未必就是编译时常量。随便举俩反例:
public static final Object OBJ = new Object(); //static final,那么是编译时常量么?显然不是,编译时怎么知道这个Object会在什么位置开辟空间?让obj引用指向哪里好呢?
public static final long A_TIME = System.currentTimeMillis(); //不但是static final,还是基本数据类型long,可是依然不是编译时常量。编译时知道我打算几点加载?作者: 孙四有 时间: 2013-7-7 00:22
static是个静态修饰符。有static修饰变量的时候,可以随着类的加载而直接出现在堆内存中。也就是常量了。