2011-03-31 72 views
2

嘿家伙,我有一个快速的问题。我正在从文件中读取数据,并根据从文件中读取的数据设置值。在运行时声明常量(Java)?

我的问题是:如果我想从文件中声明一个检索值作为常量,我该怎么做?

编辑:为简单起见,说这个值是“int”。

回答

7

我不假设您正在寻找final关键字?

final int foo = /* get it from the file */; 
+0

是的,但每当我尝试声明它为:public static final int CONSTANT;我无法将其声明为空白。所以基本上我想要这个“公共静态最终int Constant_Int;”在另一个班级中,稍后再使用。 – thunderousNinja 2011-03-31 01:45:11

+0

@Jonathan:没错。您必须在声明它们时初始化静态final字段,或者在[静态初始化程序块](http://download.oracle.com/javase/tutorial/java/javaOO/initial.html)中初始化。第二种选择可能是解决这个问题的方法。 – 2011-03-31 01:48:07

+0

啊好吧,我看到静态初始化块是我的答案!谢谢! – thunderousNinja 2011-03-31 01:50:17

5

不确定你想要这个变量的范围。就最终创建常量而言,“最终”关键字就是您需要处理的所有内容。根据运行时数据定义最终的本地变量或实例变量是很容易的,但是声明静态最终类成员更困难;你必须有值可权当类被加载并初始化,所以你必须以某种方式做一个静态初始化块:

public static final int CONSTANT; 
static { 
    CONSTANT = <something!>; 
} 
2

这里有一个方法,你可以做到这一点,只需更换generatePseudoConstant()与您的功能从文件系统读取。

public class PseudoConstant { 

    public static final int PSEUDO_CONSTANT; 
    private static final Random randomGen = new Random(); 

    static { 
     PSEUDO_CONSTANT = generatePsudoConstant(); 
    } 

    public static void main(String args[]) { 
     PseudoConstant instance1 = new PseudoConstant(); 
     PseudoConstant instance2 = new PseudoConstant(); 

     System.out.println("PSEUDO_CONSTANT (instance1) = " + instance1.PSEUDO_CONSTANT); 
     System.out.println("PSEUDO_CONSTANT (instance2) = " + instance2.PSEUDO_CONSTANT); 
    } 

    private static int generatePsudoConstant() { 
     return randomGen.nextInt(10); 
    } 
} 

干杯!