【问题标题】:Unreachable statements [duplicate]无法访问的语句[重复]
【发布时间】:2015-11-30 19:00:33
【问题描述】:

我正在为 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
    }

【问题讨论】:

  • 阅读docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html。从方法返回会停止该方法的执行。在屏幕上打印一些东西不会。有很大的不同。
  • 我希望我能参加那场考试,看起来很容易(;
  • @Helenesh 在第二个 sn-p 中根本没有回报。该语句在第一个 sn-p 中是不可访问的,因为在该 print 语句之前有一个 return。在第二个打印语句之前没有返回。

标签: java exception-handling unreachable-statement


【解决方案1】:

这是因为您在调用该语句之前总是返回。请记住,始终会调用 finally - 即使您使用 return

【讨论】:

  • 从 catch 块返回是好的:如果它被执行,那么 try 块可能没有返回任何东西。它从应该避免的 finally 块返回,因为即使 try 块已经返回了一些东西,它也会被执行。
  • 我相信可以返回任何地方,如果你知道你在做什么的话:)(毕竟它是有效的 Java 代码)。不过,在我自己的代码中,我倾向于不返回 catchfinally
猜你喜欢
  • 1970-01-01
  • 2016-07-22
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 2016-03-03
相关资源
最近更新 更多