2015-09-04 135 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