Исключения


// Блоки Try могут быть вложенными

try {
    // блок кода
    throw new ArithmeticException("demo");
}
catch (ArithmeticException е) {
    // обработчик исключений ArithmeticException
}
catch (ArrayIndexOutOfBoundsException е) {
    // обработчик исключений ArrayIndexOutOfBoundsException
    // повторное возбуждение исключения
    throw (e);
}
finally {

}


// Если какой-то метод на обрабатывает внутри себя исключения,
// он может декларировать их для внешней обработки

class SomeDemo {
    static void procedure() throws IllegalAccessException
        // ...
    }
}


// Собственные типы исключений можно наследовать от класса Exception

class MyException extends Exception {

    private int detail;

    MyException(int a) {
        detail = a:
    }
}