Проблема понимания обработки исключений Java

Я не могу понять эту программу. Я ожидаю, что он выведет "Hello World", но вместо этого он печатает только "World". Я думал, что сначала try Блок будет выполняться, печатая "Hello" и "", а затем, когда он встречает 1/0было бы бросить ArithmeticException, Исключение будет поймано catch блок, то "Мир" будет напечатан.

Программа выглядит следующим образом.

 import java.util.*;
 class exception{
     public static void main(String args[]) 
     {
         try
         {
             System.out.println("Hello"+" "+1/0);
         } 
         catch(ArithmeticException e) 
         {
             System.out.println("World");
         }
     }
 }

5 ответов

Решение

Первый "Hello"+" "+1/0 будет оцениваться. А затем передал в качестве аргумента System.out.println(...), Вот почему исключение бросается до System.out.println(...) был бы назван.

Исключение выдается перед вызовом println функция. Значение аргумента должно быть вычислено до вызова функции.

Чтобы ваша программа достигла ожидаемых результатов, вы должны отредактировать код в try блок следующим образом:

     try
     {
         // this will work and execute before evaluating 1/0
         System.out.print("Hello ");
         // this will throw the exception
         System.out.print(1/0);
     } 
     catch(ArithmeticException e) 
     {
         System.out.println("World");
     }

Он не просто сканирует "слова" слева направо. Все внутри ( ) должен быть успешно оценен, и если это так, то он печатается.

Смотрит на "Привет" и все нормально. Далее он смотрит на 1/0 и создает ошибку.

В случае, если математика была оценена успешно, она будет пытаться объединить "Hello" и результат. И если это будет успешно, то это будет напечатано.

Аргументы, которые передаются в функции/методе println, сначала будут проверены, а затем будет вызван вызов println. Таким образом, исключение возникнет перед вызовом println.

Он будет проверяться оператор за оператором. Итак, он проверяет весь аргумент println. Но у него есть исключение, поэтому выполняется блок catch.

ПРИМЕЧАНИЕ. Если он выполняет оператор первой половины, а затем проверяет наличие исключения, в блоке try-catch не остается необходимости.

Другие вопросы по тегам