2014-03-04 15 views
1

我在這裏的情況是我不能返回我的方法的聲明,因爲我的方法不能確定我的返回聲明。如何在java方法中返回語句?

public static String j(){ 

try{ 
    String k ="10"; 
    System.out.println(k); 
    } 

catch (Exception ignore) {} 

return k; // error: cannot find symbol 

} 

錯誤輸出:

cannot find symbol 
symbol: variable k 
location: class DatabaseSQL 

但是,如果我把我的return語句在嘗試{}將返回 「失蹤return語句」

public static String j(){ //missing return statement 

try{ 
    String k ="10"; 
    System.out.println(k); 

    return k; 
    } 

catch (Exception ignore) {} 

} 

ANSWER

public static String j(){ 
String k ="10";// put String k before and outside try{} 

try{ 

    System.out.println(k); 

    return k; 
    } 

catch (Exception ignore) {} 

} 

回答

7

這是關於變量作用域。在塊內聲明的變量僅在該塊內可見。嘗試:

public static String j(){ 
    String k = null; 
    try{ 
    k ="10"; 
    System.out.println(k); 
    } 

    catch (Exception ignore) {} 

    return k; 

} 

請注意,您不應該只是默默地吃異常。我知道這只是一些測試代碼,但儘快擺脫這種習慣,從長遠來看,你將爲自己節省很多痛苦!

+2

+1爲你提供漂亮的提示,無論如何,每個人似乎都給出了類似的答案,所以每個人都信賴。 +1給所有答案。 – kkk

4

這是因爲你在try塊定義String k所以這將是local variable無法在此塊

外,並在第二個代碼,你在try塊寫return聲明並沒有對catch,所以你得到這個錯誤沒有另一個接入:"missing return statement"

所以真正的代碼必須是這樣的:

public static String j(){ 
    String k ="10"; 
    try{ 
    System.out.println(k); 
    } 
    catch (Exception ignore) {} 

return k; 
} 
5

聲明你String ktry

public static String j(){ 
    String k=""; 
    try{ 
     k ="10"; 
     System.out.println(k); 
    } 
    catch (Exception ignore) {} 
    return k; 
} 
4

定義如下圖所示,在第一種情況,你的局部變量kString有一個範圍withing try塊

public static String j(){ 
String k ="10"; 
try{ 
    System.out.println(k); 
    } 

catch (Exception ignore) {} 

return k;  
} 

在第二種情況下,你還沒有任何回報,如果一個異常抓住。你要麼重新拋出Exception,要麼返回一些有意義的東西。

4

問題是因爲k沒有定義在try和catch之外。這就是爲什麼它只有當你在try塊中返回時才工作,如果你也在底部返回null,那麼它的返回值就不能在try塊中返回。

做到這一點,而不是和它會工作:

public static String j(){ 
    String k = ""; 

    try{ 
    k ="10"; 
    System.out.println(k); 
    } 

    catch (Exception ignore) {} 

    return k; 

}

4

需要聲明的字符串變量的方法的範圍,想:

public static String j(){ 
    String k = ""; 
    try{ 
     k ="10"; 
     System.out.println(k); 
    } catch (Exception ignore) {} 

    return k; 
} 
4
try{ 
    String k ="10"; // k declare inside the try and it will visible inside try 
    System.out.println(k); 
    } 

catch (Exception ignore) {} 

return k; // error: cannot find symbol // k not visible out side the try 

} 

你可以試試這種方式

String k =""; 
try{ 
k="10"; 
System.out.println(k); 
} catch (Exception ignore) {} 

return k; 
} 
3

這是因爲k未在return行的範圍內定義。你可以改變它是這樣的:

public static String j(){ // 
    String k = "10"; 
    try { 
     System.out.println(k); 
    } catch (Exception ignore) {} 
    return k; 
} 

如果你的字符串賦值應該是try塊中,給它聲明中的一些默認值(我會建議null),然後在try塊重新分配它。

3

在您的拳頭嘗試中,返回語句中的k超出了其定義的範圍(在try塊內)。

在第二次嘗試時,並非方法中的所有代碼路徑都返回值。你最好的選擇是在try語句之外定義k並在最後返回它。

public static String j(){ 
    String k ="10"; 

    try { 
     System.out.println(k); 
    }  
    catch (Exception ignore) {} 
    return k;  
} 
3

根據你的代碼的方法返回String類型的值。

public static String j(){ 

您必須確保每個可能的執行路徑的返回值是已知的。如果一切正常(嘗試塊完成W/O錯誤),返回k。但是如果發生故障(執行catch-block),則該方法的返回值是未定義的,因爲在catch-block中或之後沒有指定值。