лекция 18 (Языки программирования (лекции) (2008)), страница 2
Описание файла
Файл "лекция 18" внутри архива находится в папке "Языки программирования (лекции) (2008)". Документ из архива "Языки программирования (лекции) (2008)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "лекция 18"
Текст 2 страницы из документа "лекция 18"
unexpected()-вызывается, когда приходит исключение не типа А и В.
задача этих функций- выдать диагностику и посмертные данные.
Можно установить свой обработчик вызовом функции(как и для terminate() ):
pvf set_unexpected(pvf new_handler)
возможности:
-выдать другие сообщения или посмертные данные;
-перезапустить процесс;
старый обработчик - возвращаемое значение
В Си++ такая спецификация исключений не является необходимым и может опускаться, т.к. Си++ -гетерогенный.
Язык Java пошёл несколько дальше - он сделал из факультативного эти исключения обязательными!
И если мы пишем методы какого-то класса:
class X {
void f() throws (A, B) {
g();
throw new A();
}
}
Сначала компилятор проверяет А.
И если вызывается функция g():
void g() throws (A,C)
то компилятор выдаст ошибку, что исключение типа С не должно возбуждаться в функции f().
Java Native Interface - Вызов методов из конкретного API операционной системы. И даже для них обязательная спецификация throws ()(происходит обертка).
И поэтому про каждый метод языка Java известно, какие ИС он не обрабатывает.
Поскольку эта спецификация является обязательной, поэтому компилятор знает, какие ИС выбрасывает тот или иной метод.
Стандартные исключения:
- исключение IndexOutOfBounds
a[i]
i выходит0..N-1
Такая ИС может быть вызвана в любом методе, где есть обращение a[I];
-Аналогично - ИС MemoryAllocationError(нехватка памяти) - может возникнуть в любом методе, где есть new T().
-и д.р.
Список подобных стандартных ошибок очень велик и мы должны по спецификации языка ставить соответствующие обработчики в каждом таком месте.
JVMError - ошибка Java-машины, которая, теоретически, может возникнуть в любом месте...
Аксиома: ошибка может возникнуть ошибка.
Поэтому мы обязаны специфицировать только те ошибки, которые мы сами объявляем.
От типа Throwable наследовано две ветви типов:
-
Error (JVMError, AbstractMether)-реагировать не обязаны
-
Exception
a)RunTimeException,(IndexOutOfBounds,...)- реагировать не обязаны
b) объявляемые исключения;-реагировать обязаны
И на все исключения во второй иерархии мы внутри нашего кода должны ставить либо catch, либо говорить, что наш метод бросает (throws) какое-то исключение.
Анонс:
Осталось 3 лекции, на следующей лекции мы начнём новую главу, посвящённую объектно-ориентированным языкам.
8