Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java1_2013_2014 / java5.pptx
Скачиваний:
169
Добавлен:
16.04.2015
Размер:
128.09 Кб
Скачать

Неконтролируемые исключения

В принципе, не запрещается определять классы-потомки от

RuntimeException и Error

Они также могут содержать дополнительную информацию

Их не обязательно указывать в заголовке бросающего метода

Компилятор не контролирует их бросание и обработку (вне зависимости от того, указаны ли они в заголовке метода или нет)

Не рекомендуется определять и использовать расширения классов RuntimeException и Error; однако сами стандартные исключения использовать можно и даже рекомендуется:

if (p == null) throw new NullPointerException();

По семантике языка, потомок RuntimeException – это (стандартное) исключение, которое бросает Java Runtime (JVM); например, ClassCastException – неверное приведение класса

Потомок Error – это (стандартная) ошибка, например, OutOfMemoryError // используйте опцию, напр., java –mx128m C

(C) В.О. Сафонов. 2013

Обработка исключений: оператор try/catch/finally

public class TableUser {

public static void main(String[] args) { Table t = new Table(); …

try {

Object elem = t.getElement(”abc”); …

}catch (NoElementException e) { // обработка исключения System.out.println

(”Элемент с ключом ” + e.key + ” не найден”);

}catch (Throwable e) { // обработка остальных исключений System.out.println(“Неожиданное исключение:” + e);

}finally {

System.out.println(”Исполняется всегда”);

}// finally исполняется, даже если исключение не поймано

//(”последнее желание” == last resort )

}

(C) В.О. Сафонов. 2013

Примеры использования исключений

public class MyException extends Exception { … } public class MyError extends Error { … }

public class MyRuntimeException extends RuntimeException { … }

public class ExceptionUser {

public static void m1() { throw new MyException(); } // ошибка public static void m2() throws MyException

{throw new MyException(); } // все правильно public static void m3()

//throws MyRuntimeException – не обязательно

{throw new MyRuntimeException(); } // все правильно

//аналогично – для MyError

public static void main(String[] args) { m2(); // ошибка

try { m2(); } catch (MyException e) { System.out.println(”Gotcha!”)}

}}// ExceptionUser

(C)В.О. Сафонов. 2013

Дополнительные возможности класса Exception

public String toString() – выдает имя класса-исключения (по умолчанию), либо расширенный текст сообщения, если он был предусмотрен в конструкторе:

throw new MyException(”My exception occurred”);

public String getMessage() – выдает текст сообщения, соответствующего данному исключению

public void printStackTrace() – выдает в стандартный вывод трассировку стека при обработке исключения:

try { … } catch (MyException e) { e.printStackTrace(); } System.out.println(”OK”); // вывод:

MyException

at: ExceptionUser.m2 (ExceptionUser.java: 6) at: ExceptionUser.main (ExceptionUser.java: 10)

OK

Настоятельно рекомендуется при обработке исключения визуализировать для пользователей текст сообщения, содержащийся в объекте-исключении, например:

catch (Exception e) { System.err.println(“Exception” + e) }

(C) В.О. Сафонов. 2013

Assertions (предположения)

В Java впервые реализованы в JDK 1.4

Имеют вид:

assert B;

где B - логическое условие

Являются исполняемыми конструкциями: вычисляется условие; если оно ложно - AssertionError

Исторически появились в языках, начиная с 70-х годов. Например, широко используются в C++

Могут быть использованы для программирования на Java в стиле Design-by-Contract (Bertrand Meyer): с помощью assertions могут выражаться предусловия (require) и постусловия (ensure), например:

public static int GCD (int m, n) {

assert (m > 0 && n > 0); // precondition

(C) В.О. Сафонов. 2013

Q&A

Вопросы?

(C) В.О. Сафонов. 2013

Соседние файлы в папке java1_2013_2014