什么时候应该使用未初始化的静态最终变量?
我假设你的意思是:
public static final Object obj;
与没有明确分配初始值?
您可以根据只能在运行时发生的某些计算将它分配到static
块中,如读取某些属性文件以创建在编译时未知的应用程序范围内的常量。
当初始化变量不能在一行中完成时使用它。例如:
private static final Map<String, String> CACHE;
static {
Map<String, String> cache = new HashMap<String, String>();
cache.put("foo", "bar");
cache.put("zim", "bam");
// lots of other entries
CACHE = Collections.unmodifiableMap(cache);
}
基本上,如果您需要指定一个不能在单个表达式中轻松表示的值。例如,您可能想要执行一些逻辑来构建不可变映射,然后分配它。
一般来说,更具可读性把“建设”逻辑到一个单独的静态方法和使用,在正常作业,但:
private static final Map<String, String> FOO_MAP = buildFooMap();
谢谢!它给了我更好的解释。 – 2012-12-31 10:40:05
静态+最终
总之,
静态 - 以使其为类变量 - 独立对象的(可通往每个对象总是相同的位置)
Final - 使它成为一个常数(如果final是在变量ofcourse!之前!)
我们在哪里只需要静态?
=>可以计算一个对象的实例数量。
我们在哪里只需要最终?
=>好,让事情不变!
我们在哪里需要static + final?
=>使变量可以访问每个对象,并使一个常量。为COLOR创建类可能是。
对于空白静态变量,初始化由静态块完成。
public class StaticDemo
{
private static final String name;
static
{
name = "yash";
}
}
为什么使用空白的?因为可能是你一开始就无法初始化。我接受前一个的。
如果静态字段的初始化程序可能会引发异常,则无法将其初始化为一行,但必须具有静态块或静态方法。
谢谢!它可以是未初始化的静态最终变量的一种用法。 – 2012-12-31 10:38:29
静态final变量必须在创建时初始化,与空白最终变量不同,不能将初始化推迟到构造函数,因为它们是静态的。
也许_never_? – 2012-01-31 17:43:48
“空白”是什么意思?你的意思是一个'static final'变量被初始化为'null'吗?或者你只是指任何一种'static final'变量('private static final','public static final'等)? – 2012-01-31 17:44:03
他意味着空白,因为在未初始化。 – fivedigit 2012-01-31 17:45:44