2016-05-12 51 views
0

我想創建一個遞歸方法(函數)。此方法處理另一個類的對象,其中每個類的實例都有3個Integer字段。 (整數var1,var2,var3;)。我想知道是否有「變量可能未被初始化」的異常或錯誤,所以在這種情況下,該方法將停止。起初,我認爲它會拋出nullPointerException,因爲它是一個對象,但解包自動工作。有沒有解決方法? (我知道這是一個編譯錯誤...)Java:變量的捕捉異常可能沒有被初始化

+0

你的問題沒有意義。字段默認初始化爲空(如果它們是引用類型的話);所以你不應該從你所描述的那裏得到一個編譯錯誤。 (變量可能未被初始化的編譯錯誤只適用於本地變量和最終字段。)你能發佈你的實際代碼嗎? – ruakh

+0

一個簡單的例子: class test { \t public static void main(String args []){ \t \t Integer x; \t \t System.out.println(x); \t \t}} 類測試{ \t公共靜態無效主要(字符串ARGS []){ \t \t整數x = NULL; \t \t System.out.println(x); \t \t}} 輸出1:test.java:5:錯誤:變量x可能尚未初始化 \t \t的System.out.println(X); \t \t^ 1錯誤 輸出2:空 – JAAAY

+0

我覺得他遇到了一個編譯器錯誤,因爲他的傳球在參數(S)沒有初始化,以及他試圖繞過與一個try/catch是編譯器錯誤。 – Jayson

回答

0

一種方法可能是在使用它之前檢查它是否是類類型的實例。考慮以下幾點:

Integer x = null; 
Integer y = new Integer(0); 

if(x instanceof Integer) 
    System.out.println("x is initialized."); 
else 
    System.out.println("x is NOT initialized."); 

if(y instanceof Integer) 
    System.out.println("y is initialized."); 
else 
    System.out.println("y is NOT initialized."); 

輸出將導致:

X未初始化。

y被初始化。

0

你可以在該方法的外部範圍內用dummy/temporary值初始化所有三個變量,然後用任何傳入你方法的值來覆蓋它們。例如:

Integer myVar1 = 0; 
Integer myVar2 = 0; 
Integer myVar3 = 0; 
public static void yourMethod(Integer var1, Integer var2, Integer var3) { 
    try { 
    myVar1 = var1; 
    myVar2 = var2; 
    myVar3 = var3; 
    ... your code 
    catch(NullPointerException ex) { 
    // handling error code 
    } 
} 
+0

除非需要唯一的引用,否則不要使用'new Integer()'。 – shmosel

+0

@Jayson但如何捕捉異常呢? – JAAAY

+0

您只需將代碼包裝在try catch中即可。如果這些變量沒有在其他地方初始化,我認爲你在混淆你期望的錯誤。如果它們沒有被初始化,你會得到一個編譯錯誤,但是如果你傳遞了一個null值,並且你正在嘗試處理它,那麼你將會遇到另一個錯誤,例如,一個空指針。所以你不能做像var1.intValue()這樣的事情; – Jayson