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

Сникерс, станьте моим гостем и отправляйтесь в испытательный центр. Попробуйте посмотреть ;-) – Helenesh

ответ

4

Это потому, что вы всегда возвращение перед вызовом этого заявления. Помните, что finally всегда вызывается - даже если вы используете return.

+1

Возврат из блока catch прекрасен: если он выполнен, тогда блок try ничего не может вернуть. Он возвращается из блока finally, которого следует избегать, поскольку он выполняется, даже если блок try уже что-то вернул. –

+0

Я верю, что это может быть * отлично, чтобы вернуться куда угодно, если вы знаете, что делаете :) (это действительно код Java в конце концов). Тем не менее, в моем собственном коде я склонен не возвращаться ни в «catch», ни «finally». – meskobalazs

Смежные вопросы