Почему не могу поймать ошибку?

Всем привет. Нужна ваша помощь. У меня есть код который делит число на ноль. Но программа не может поймать ошибку. Как решить? Сможете помочь?

public class Main {

    public static void main(String[] args) {
        try
        {
            int x = 0;
            int y = 5/x;
        }
        catch (Exception e)
        {
            System.out.println("erekshe zhagdai");
        }
        catch (ArithmeticException ae)
        {
            System.out.println("arithmetikalyk zhagdai");
        }
        System.out.println("ayaktaldy");
    } 
}

Это ошибка при компиляций:

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Sergey Chernikov

Ошибка вылетает по той причине, что ты написал неправильную последовательность перехвата исключений. Типы исключений должны идти от более специализированных к более общим. ArithmeticException наследуется от Exception, поэтому тебе в консоль и выводится, что это исключение уже поймано в блоке catch (Exception e). Просто поменяй порядок блоков catch и программа будет работать до конца без ошибок.

//сначала это
catch (ArithmeticException e)
{ System.out.println("ArithmeticException"); }

//потом это
catch (Exception e)
{ System.out.println("Exception"); }
→ Ссылка