嘿傢伙,我有一個快速的問題。我正在從文件中讀取數據,並根據從文件中讀取的數據設置值。在運行時聲明常量(Java)?
我的問題是:如果我想從文件中聲明一個檢索值作爲常量,我該怎麼做?
編輯:爲簡單起見,說這個值是「int」。
嘿傢伙,我有一個快速的問題。我正在從文件中讀取數據,並根據從文件中讀取的數據設置值。在運行時聲明常量(Java)?
我的問題是:如果我想從文件中聲明一個檢索值作爲常量,我該怎麼做?
編輯:爲簡單起見,說這個值是「int」。
我不假設您正在尋找final
關鍵字?
final int foo = /* get it from the file */;
不確定你想要這個變量的範圍。就最終創建常量而言,「最終」關鍵字就是您需要處理的所有內容。根據運行時數據定義最終的本地變量或實例變量是很容易的,但是聲明靜態最終類成員更困難;你必須有值可權當類被加載並初始化,所以你必須以某種方式做一個靜態初始化塊:
public static final int CONSTANT;
static {
CONSTANT = <something!>;
}
這裏有一個方法,你可以做到這一點,只需更換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);
}
}
乾杯!
是的,但每當我嘗試聲明它爲:public static final int CONSTANT;我無法將其聲明爲空白。所以基本上我想要這個「公共靜態最終int Constant_Int;」在另一個班級中,稍後再使用。 – thunderousNinja 2011-03-31 01:45:11
@Jonathan:沒錯。您必須在聲明它們時初始化靜態final字段,或者在[靜態初始化程序塊](http://download.oracle.com/javase/tutorial/java/javaOO/initial.html)中初始化。第二種選擇可能是解決這個問題的方法。 – 2011-03-31 01:48:07
啊好吧,我看到靜態初始化塊是我的答案!謝謝! – thunderousNinja 2011-03-31 01:50:17