2015-09-04 134 views
-1

我正在爲OCA考試唸書,我不明白爲什麼parseFloat()中的最後一行無法訪問,而go()中的最後一行不是。除了返回類型之外,我沒有看到很大的區別。無法訪問的語句

public float parseFloat(String s) { 
     float f = 0.0F; 
     try { 
      f = Float.valueOf(s).floatValue(); 
      return f; 
     } catch (NumberFormatException e) { 
      f = Float.NaN; 
      return f; 
     } finally { 
      return f; 
     } 
     System.out.println(""); //unreachable statement 
    }  
    public void go() { 
     System.out.println("A"); 
     try { 
      System.out.println(3/0); 
     } catch (ArithmeticException e) { 
      System.out.println("b"); 
     } finally { 
      System.out.println("c"); 
     } 
     System.out.println("d"); //reachable statement 
    } 
+1

閱讀https://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html。從方法返回將停止方法的執行。在屏幕上打印某些內容不會。這是個很大的差異。 –

+3

我希望我參加過那次考試,看起來很簡單(; – Snickers3192

+0

Snickers,成爲我的客人,然後去考試中心看看;-) – Helenesh

回答

4

這是因爲在調用該語句之前,你總是。請記住,即使您使用return,始終也會調用finally

+1

是好的:如果它被執行,那麼try塊沒有可能返回任何東西。它從一個應該避免的finally塊返回,因爲即使try塊已經返回了一些東西也會被執行。 –

+0

我相信*可以很好地返回任何地方,如果你知道你在做什麼:)(畢竟它是有效的Java代碼)。儘管如此,在我自己的代碼中,我傾向於不以'catch'或'finally'返回。 – meskobalazs