我跟着就如何聲明全局contants在幾個職位這裏給出的建議是:宣佈在Java中的全局常量 - 但避免NullPointerException異常錯誤
public class Constants {
public static final int i1 = 1;
public static final int i2 = 2;
}
我只是有這個類在我的項目,是指像常數這樣的:
in any other class...
GlobalsVars.gi1 = Constants.i1;
(PS我希望這是OK,不需要做任何事情來的常量類像初始化或任何東西。)
但作爲我在這裏發現:使用靜態全局變量的assigning int to Integer不是一個好主意。訪問常量時,我的應用程序有時會崩潰。
儘管我發現它真的很奇怪,因爲我的應用程序很小,但可能是Constants類 - 不是活動 - 在某些情況下真的從內存中刪除,儘管我在我的所有活動中都訪問其常量。這就是爲什麼我會認爲它不應該從記憶中刪除。
但是肯定的是,在某些情況下,當訪問Constants.i1值時,我的應用程序崩潰。
以可靠的方式聲明一些常量的最好方法是什麼? (在c-Derivatives中有易於使用的宏)但Android中沒有這樣的東西。
- >所有我需要的是在Java中 「可靠」 常量...
編輯:
添加聲明GlobalVars類
public class GlobalVars {
public static Integer gi1;
public static Integer gi2;
}
非常感謝
編輯: 新增碰撞記錄
java.lang.RuntimeException:無法啓動活動ComponentInfo {com.xxxx.xxxx/com.xxxx.xxxx.screens.One_screen}:java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 1830) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851) at android.app.ActivityThread.access $ 1500(ActivityThread.java:132) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java :1038) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:4293 ) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang。方法.invoke(Method.java:507) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:849) at com.android.internal.os.ZygoteInit.main(ZygoteInit。 Java的:607)在dalvik.system.NativeStart.main(本機方法) 產生的原因:在COM在com.xxxx.xxxx.screens.Settings_screen.presentOnScreen(One_screen.java:172) 顯示java.lang.NullPointerException 。 xxx.xxxx.screens.Settings_screen.onCreate(One_screen.java:49) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794) 。 ..在One_screen 11多個
和行172:
if (GlobalVars.gi1 == Constants.i1){
如果你的變量gi1不是一個靜態變量,所以你不能這樣做NameOfYourClass.gi1,這隻適用於靜態變量;例如:YourClassName.staticVar = Constants.i1;或者:this.gi1 = Constants.i1; – Houcine
我添加了GlobalVars的聲明。在那裏,我聲明變量是靜態的,正如你指出的那樣。 – user387184
這很奇怪。如果你反編譯你的代碼,你會發現你所提到的所有常量都被轉換成了值。 喜歡這個。 Original)int a = Const.A; //值A = 1 編譯)int a = 1; //引用的常量被轉換爲值本身。 檢查你的編譯代碼怎麼樣? – kingori