Пацей 4 сем / Лекции / СТПI_2_ООП
.pdfИерархия исключений и
ошибок
возникают только во время выполнения
программы
проверяемые исключения
Проверяемые - должны быть обработаны в методе, который может их генерировать, или включены в throws-список метода для дальнейшей обработки в вызывающих методах
непроверяемые исключения
Системные
проверяемые
Классы непроверяемых исключений от RuntimeException
►ArithmeticException
►ArrayIndexOutOfBoundsException
►ArrayStoreException
►ClassCastException
►ConcurrentModificationException
►IllegalArgumentException
►IllegalMonitorStateException
► IllegalStateException
► IllegalThreadStateException
► IndexOutOfBoundsException
► NegativeArraySizeException
►NullPointerException
►NumberFormatException
► StringIndexOutOfBoundsException
► UnsupportedOperationException
Способы обработки исключений
►1) перехват и обработка исключения в блоке try-catch метода
►2) объявление исключения в секции throws метода и передача вызывающему
методу
Ключевое слово throws позволяет разобраться
с исключениями методов «чужих» классов, код которых отсутствует.
public boolean add (Air item) throws LogicalException { boolean flag = false;
if( item != null) { |
контролируется |
|
airlist.add(item); |
||
компилятором |
||
flag = true; |
||
|
}
else {
throw new LogicalException("Null pointer");
}
return flag;}
►3)использование собственных исключений
Обработка нескольких исключений
catch(IllegalArgumentException e) { } catch(PatternSyntaxException e) { }
/* никогда не может быть вызван: ошибка компиляци
►идентичная обработка
try {
//
} catch(NumberFormatException |
ClassNotFoundException |
InstantiationException e) { e.printStackTrace();
}
1)Исключения – ресурсоемкие (если можно обойтись)
2)Можно создавать проверяемое исключение
public class LogicalException extends Exception{
private static final Logger LOG = Logger.getLogger(LogicalException.c
public LogicalException() { super(); }
public LogicalException(String message, Throwable cause) { super(message, cause);
LOG.error(message,cause);
}
public LogicalException(String message) {
super(message);
LOG.error(message);
}
}
finally
try {
}catch(OneClassException e) {// необязателен
}catch(TwoClassException e) {// необязателен
}finally { /* выполняется или после try,
или после catch */ } System.out.println(now);
негенерировать исключения в инструкции finally
Наследование и исключения
►переопределяемый метод в подклассе не может содержать в инструкции throws исключений, не обрабатываемых в соответствующем методе суперкласса;
►конструктор подкласса должен включить в свой блок throws все классы исключений или их суперклассы из блока throws конструктора суперкласса, к которому он обращается при создании объекта.
class Resource {
public Resource(String filename) throws FileNotFoundException
{
} }
class ConcreteResource extends Resource {
public ConcreteResource(String name) throws FileNotFoundException super(name);
}
}