2011-03-31 66 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); 
    } 
} 

乾杯!