2013-01-29 3 views
1

новое для StackOverFlow и довольно новое для Java. Программирование на C до этого и я пытаюсь получить основы Java.Исключение обработки Поведение восстановления

Просто немного запутались в следующем коде:

public class Exercise5 { 
private static int[] ia = new int[3]; 
static int x = 5; 
public static void main(String[] args) { 
    while(true) { 
     try { 
      ia[x] = 1; 
      System.out.println(ia[x]); 
      break; 
     } catch(ArrayIndexOutOfBoundsException e) { 
      System.err.println(
       "Caught ArrayIndexOutOfBoundsException"); 
       e.printStackTrace(); 
      x--; 
     } finally { 
      System.out.println("Are we done yet?");  
     } 
    } 
    System.out.println("Now, we're done."); 
} 

}

Я все еще пытаюсь получить мою голову вокруг попробовать, улов и, наконец, блоки. Я не понимаю, что в этом коде программа работает только до первого экземпляра, когда происходит не исключение, и затем он выходит из цикла while.

Я понимаю, что цикл while будет работать до тех пор, пока у вас не закончится память, поэтому кто-то может объяснить, как код выходит из цикла while в первом экземпляре исключений.

Спасибо!

Marco

+0

Извините, я только что понял, что есть ключевое слово break. Но чтобы уточнить, блок finally будет выполнен независимо от того, как мы выходим из блока try, как в этом примере, в котором мы вышли из блока try, а также цикла while? – SeekingAlpha

+0

'finally' block всегда запускается, если вы не выполнили' System.exit() 'в блоке' try/catch' –

ответ

3

Во-первых, это x равна 5, а затем программа переходит к петле while. Поскольку 5 больше размера массива, он будет давать исключение и перейти к блоку исключений. Здесь x будет уменьшен и снова запущен в цикл while. До x доходит до 2, больше не существует никакого исключения; поэтому он может достигать линии break. Таким образом, программа может выйти из цикла while и закончить

+0

Это правильно. Цикл повторяется только в случае исключения. И каждое исключение будет уменьшать индекс X до тех пор, пока не произойдет исключение и не будет достигнута линия «break», которая завершит цикл while. –

0

try{}

Выполняет код, пока исключение не произошло

catch(ExceptionType e){}

если брошено исключение встречается тип excetpion упомянутый, следующий блок запускается на выполнение наряду с исключением поставляемого здесь как e

finally{}

Выполнение независимо от того, за исключением (ов) брошенной

0

Вы создали массив с размером 3, с переменным х со значением 5. Таким образом, в первой итерации вы увидите ArrayIndexOutOfBoundsException, но в catch блоке x уменьшается. Итак, мы снова идем, теперь x составляет 4, а 3 и, наконец, равно 2. Теперь вы не увидите никаких исключений и программы.

0

Во-первых, Попробуйте выполнить, если он исключен без исключения, тогда он будет разбит только на одну итерацию и, наконец, будет выполнен.

Если возникло исключение, он пойдет в блок catch и затем, наконец,.

Он будет повторять петлю в соответствии с приведенным выше поведением .. Не стесняйтесь просить о дальнейших разъяснениях.

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