2016-05-03 6 views
0

Я пишу цикл, который игнорировал Исключение, и он работает хорошо.try-finally block continue for loop

for (; flag;) { 
     try { 
      //do something ignore exception. 
      Runnable r = queue.pollFirst(); 
      r.run(); 
     } catch (Exception ignored) { 
      // ignored. 
     } 
    } 

Но мой вопрос: Если я не поймать RuntimeException и сила продолжают цикла в наконец блока, что будет происходить с Exception и возвращаемым значение?

Пример:

for (int i = 0; i < 10; i++) { 
     try { 
      System.out.println(i); 

      throw new RuntimeException(); 
     } finally { 
      //what will happen to the exception if continue loop? 
      continue; 
     } 
    } 
+0

continue приводит к отбрасыванию исключения или возвращаемого значения. Вы можете легко проверить это. –

+1

@PeterLawrey: хотя я согласен с вами в том, что это не большой вопрос, просто попытка что-то не гарантирует, что наблюдаемое поведение - это то, что происходит во всех случаях. – Oebele

+0

@PeterLawrey. Я знаю, что исключения игнорируются. Это вызовет некоторые проблемы? утечка памяти или переполнение стека или что-то в этом роде. – lymoge

ответ

2

Они будут ignored как finally блок имеет final слово.

0

Не знаете, почему вы хотите поймать RuntimeException, потому что к тому моменту, когда вы даже попытаетесь поймать его, слишком поздно, поэтому ваше продолжение никогда не ударит.

1

Runtime Exception будет проигнорирован, потому что нет никакого блока catch для доступа/использования (например, для целей ведения журнала) брошенного объекта java.lang.RuntimeException. наконец, блок не имеет никакого доступа к объекту Exception, брошенному блоком try. Лучше иметь блок catch для получения дополнительной информации.