Java unaught exceptions <br /> Прежде чем вы научитесь обрабатывать исключения в программе, полезно посмотреть, что произойдет, если вы не справитесь с ними. Следующий апплет включает выражение, которое намеренно вызывает ошибку с нулевым возражением.
Класс Exc0 {Public void main (String args []) {int d = 0;
Когда система выполнения Java проверяет ситуацию, которая разделена на ноль, она строит новый объект исключения и бросает исключение. Это приводит к прекращению выполнения EXC0, потому что после того, как исключение будет выброшено, его должно быть пойман в обработке исключений и обработано немедленно. В этом примере мы не предоставляем ни одного из наших собственных обработчиков исключений, поэтому исключение завоевано обработчиком по умолчанию системы выполнения Java. Любое исключение, которое не поймано вашей программой, в конечном итоге будет обработано обработчиком по умолчанию. Обработчик по умолчанию отображает строку, описывающую исключение, печатает трассировку стека, где происходит исключение, и завершает программу.
Вот выход, сгенерированный стандартным интерпретатором времени выполнения Javajdk для выполнения программы:
java.lang.arithmeticexception: / by Zero At Exc0.main (Exc0.java:4)
Обратите внимание, как имя класса Exc0, имя метода Main, имя файла Exc0.java и строка № 4 включены в простую дорожку использования стека. Кроме того, обратите внимание, что тип исключения брошенного является подклассом исключения, называемого arithmeticexception, который более четко описывает, какой тип метода ошибок. Обсудите позже в этой главе Java предоставляет несколько встроенных типов исключений, которые соответствуют различным типам ошибок времени выполнения, которые могут быть сгенерированы.
Трек стека будет отображать последовательность вызовов методов, которая привела к ошибке. Например, вот еще одна версия предыдущей программы, которая вводит ту же ошибку, но ошибка генерируется в другом методе, кроме метода Main ():
Класс Exc1 {static void subroutine () {int d = 0;
Результаты трека стека в обработчике исключений по умолчанию показывают, как отображается весь стек вызовов:
java.lang.arithmeticexception: / by Zero At Exc1.subroutine (Exc1.java:4) на Exc1.main (Exc1.java:7)
Как видите, нижняя часть стека - линия 7 Main, которая вызывает метод subroutine (). Этот метод вызывает исключение в строке 4. Стек вызовов важен для отладки, потому что он определяет точные шаги, которые приводят к ошибке.
Гнездование Java Try Заявления
Попробуйте заявления могут быть вложены. То есть оператор TRY может быть внутри другого блока Try. Каждый раз, когда вы вводите заявление TRY, исключение до и после отношений будет выдвинуто в стек. Если заявление внутреннего TRY не содержит обработчика с особыми исключениями, стек появится, а обработчик подложек следующего оператора TRY проверит, соответствует ли он. Этот процесс будет продолжаться до тех пор, пока заявление об улове не будет успешно соответствовать, или до тех пор, пока все вложенные операторы TRY не исчерпаны. Если оператор Catch Match Makes, система выполнения Java будет обрабатывать это исключение. Вот пример использования вложенных заявлений Try:
// Пример вложенных операторов. Разделение-с помощью исключения. Разделение-с помощью исключения с помощью следующего кода. ou t -f-bounds Exception. e) {System.out.println ("Индекс массива вне бензий:" + e);
Как вы можете видеть, программа гнездирует еще один блок попытки в одном блоке Try. Программа работает следующим образом: когда вы выполняете программу без параметров командной строки, блок внешнего TRY будет генерировать исключение, деленное на ноль. Программа выполняется в условиях параметра командной строки, а ошибка, деленная на вложенную блоку Try, приводит к делимой ошибке. Поскольку внутренний блок не соответствует этому исключению, он передает исключение из блока Overde Try, где обрабатывается исключение. Если вы выполняете программу с двумя параметрами командной строки, исключение границы массива генерируется внутренним блоком try. Следующие результаты иллюстрируют каждый случай:
C:/> java nesttrydivide by 0: java.lang.arithmeticexception:/by zeroc:/> java nesttry onea = 1divide по 0: java.lang.arithmeticexception:/by zeroc:/> java nedtres Блюда: java.lang.arrayindexoutofboundsexception
Когда есть вызов метода, гнездование заявлений TRY может произойти очень тайно. Например, вы можете поставить вызов методу в блоке Try. Внутри этого метода есть еще одно утверждение TRY. В этом случае попытка внутри метода все еще вкладывается в блок Try, который вызывает метод извне. Ниже приводится модификация предыдущего примера, и вложенные блоки TRY перемещаются в внутреннюю часть метода Nesttry ():
/* Заглавные операторы могут быть косвенно вложены с помощью вызовов к методам. -Ноль исключение будет сгенерировано следующим кодом. F- Исключение. .out .println ("Индекс массива вне бензий:" + e); Предо ПЕРЕСМОГО ОТВЕТСТВЕННОСТИ СЛЕДУЕТСЯ. {System.
Вывод этой программы такой же, как в предыдущем примере.