Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемВалентина Вышеславцева
1 Кафедра ОСУ, Java 2004 Обработка исключений В Java обработка исключительных ситуаций (exception handling) происходит следующим образом: Либо сам язык Java, либо код, написанный программистом, обеспечивает механизм, который сигнализирует, когда случается что-то необычное – возбуждение, или генерация исключительной ситуации (throwing an exception).
2 Кафедра ОСУ, Java 2004 Обработка исключений В программе помещается также код, который непосредственно выполняет обработку исключительной ситуации. Базовый механизм обработки исключительной ситуации реализуется триадой блоков try – throw – catch Если исключение не генерируется, то catch блоки игнорируются.
3 Кафедра ОСУ, Java 2004 Обработка исключений Исключение в Javaэто объект, который описывает исключительное состояние, возникшее в каком-либо участке программного кода. Когда возникает исключительное состояние, создается объект класса Exception. Этот объект пересылается в метод, обрабатывающий данный тип исключительной ситуации. Исключения могут возбуждаться и «вручную» для того, чтобы сообщить о некоторых нештатных ситуациях
4 Кафедра ОСУ, Java 2004 Обработка исключений общая форма блока обработки исключений. try { …. // блок кода } throw(e) // возбуждение исключения catch (ТипИсключения1 е) { // обработчик исключений типа // ТипИсключения1 } catch (ТипИсключения2 е) { // обработчик исключений типа //ТипИсключения2 throw(e) // повторное возбуждение //исключения } finally { }
5 Кафедра ОСУ, Java 2004 Обработка исключений Сначала выполняется код, заключенный в фигурные скобки оператора try. Если во время его выполнения не происходит никаких нештатных ситуаций, то далее управление передается за закрывающую фигурную скобку последнего оператора catch, ассоциированного с данным оператором try.
6 Кафедра ОСУ, Java 2004 Обработка исключений Если в пределах try возникает исключительная ситуация, то далее выполнение кода производится по одному из нижеперечисленных сценариев:
7 Кафедра ОСУ, Java 2004 Обработка исключений производится выполнение блока кода, ассоциированного с данным catch если код в этом блоке завершается нормально, то и весь оператор try завершается нормально если код в catch завершается нештатно, то и весь try завершается нештатно по той же причине если возникла исключительная ситуация, класс которой не указан в качестве аргумента ни в одном catch, то выполнение всего try завершается нештатно
8 Кафедра ОСУ, Java 2004 Обработка исключений Оператор finally предназначен для того, чтобы обеспечить гарантированное выполнение какого-либо фрагмента кода, вне зависимости от того, возникла ли исключительная ситуация если блок finally завершается ненормально, то весь try завершится ненормально по той же причине.
9 Кафедра ОСУ, Java 2004 Обработка исключений Программист сам может явно сгенерировать ошибку с помощью оператора throw. public int calculate(int theValue) throws Exception { if( theValue < 0) { throw new Exception( "Some descriptive info"); } }
10 Кафедра ОСУ, Java 2004 Обработка исключений В вершине иерархии исключений стоит класс Throwable. Каждый из типов исключений является подклассом класса ThrowableThrowable Подкласс Ехceptionиспользуется для описания исключительных ситуаций, которые должны перехватываться программным кодом пользователя.
11 Кафедра ОСУ, Java 2004 Обработка исключений Подкласс Error, предназначен для описания исключительных ситуаций, которые при обычных условиях не должны перехватываться в пользовательской программе Объекты-исключения автоматически создаются исполняющей средой Java в результате возникновения определенных исключительных состояний
12 Кафедра ОСУ, Java 2004 Обработка исключений Example 1 class Exc0 { public static void main(string args[]) { int d = 0; int a = 42 / d; } } С:\> java Exc0 java.lang.ArithmeticException: / by zero at Exc0.main(Exc0.java:4)
13 Кафедра ОСУ, Java 2004 Обработка исключений Example 2 class Exc2 { public static void main(String args[]) { try { int d = 0; int a = 42 / d; } catch (ArithmeticException e) { System.out.println("division by zero"); } } }
14 Кафедра ОСУ, Java 2004 Обработка исключений Example 3 class MultiCatch { public static void main(String args[]) { try { int a = args.length; System.out.println("a = " + a); int b = 42 / a; int c[] = { 1 }; c[42] = 99; }
15 Кафедра ОСУ, Java 2004 Обработка исключений catch (ArithmeticException e) { System.out.println("div by 0: " + e.getMessage()); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("array index c:"+ e.getMessage()); } } }
16 Кафедра ОСУ, Java 2004 Обработка исключений 1. С:\> java MultiCatch а = 0 div by 0: java.lang.ArithmeticException: / by zero 2. C:\> java MultiCatch 1 a = 1 array index c: java.lang.ArrayIndexOutOfBoundsExceptio n: 42
17 Кафедра ОСУ, Java 2004 Обработка исключений Если в конструкции обработки исключений используется несколько операторов catch классы исключений нужно перечислять в них последовательно, от менее общих к более общим. Наиболее специализированные классы исключений должны идти первыми, поскольку ни один подкласс не будет достигнут, если поставить его после суперкласса.
18 Кафедра ОСУ, Java 2004 Обработка исключений Исключение генерируется по одной из трех причин: 1. Виртуальной машиной языка Ява было обнаружено ошибочное состояние формула оценки выражения нарушает нормальную семантику языка Ява ошибка происходит при загрузке или компоновке части Ява- программы
19 Кафедра ОСУ, Java 2004 Обработка исключений некий ограниченный ресурс превышен 2. Оператор throw был выполнен в Ява- коде. 3. В виртуальной машине произошла внутренняя ошибка
20 Кафедра ОСУ, Java 2004 Обработка исключений Исключения представлены экземплярами класса Throwable и его подклассов. Все вместе эти классы- классы исключений – делятся на 2 типа 1. Классы проверяемых исключений 2. Классы непроверяемых исключений
21 Кафедра ОСУ, Java 2004 Обработка исключений Во время компиляции язык Ява проверяет то, что Ява- программа содержит обработчики для проверяемых исключений Классы непроверяемых исключений - это класс RuntimeException и его подклассы, а также класс Error и его подклассы Все оставшиеся классы исключений - классы проверяемых исключений (обязательно нужно перехватывать).
22 Кафедра ОСУ, Java 2004 Обработка исключений Класс RuntimeException: ArithmeticException ArrayStoreException ClassCastException IllegalArgumentException NumberFormatException IndexOutOfBoundsException NegativeArraySizeException NullPointerException
23 Кафедра ОСУ, Java 2004 Обработка исключений Стандартные проверяемые исключения: ( для Exception кроме Runtime) ClassNotFoundException IllegalAccessException InstantiationException:
24 Кафедра ОСУ, Java 2004 Обработка исключений Пакет java.io определяет следующие дополнительные стандартные исключения: IOException EOFException FileNotFoundException
25 Кафедра ОСУ, Java 2004 Обработка исключений Класс Error : Error базовый класс для исключительных ситуаций, вызванных серьезными сбоями в работе виртуальной машины Java. Если возникла исключительная ситуация типа Error, то возможность продолжения работы программы сомнительна нужно прекращать работу программы и, возможно, переинсталлировать Java. Перехватывать исключения типа Error не нужно.
26 Кафедра ОСУ, Java 2004 Обработка исключений Класс Error : ошибки загрузки, компоновки, подготовки, контроля или инициализации (экземпляры подкласса LinkageError) ошибки виртуальной машины: генерирует объект, который является экземпляром подкласса класса VirtualMachineError
27 Кафедра ОСУ, Java 2004 Обработка исключений Ошибки InternalError OutOfMemoryError StackOverflowError UnknownError
28 Кафедра ОСУ, Java 2004 Обработка исключений Методы класса Throwable Позволяют получить информацию из исключения, наиболее важные из них. public String toString() - Краткое сообщение о исключении. public String getMessage() - Полное сообщение о исключении.
29 Кафедра ОСУ, Java 2004 Обработка исключений Методы класса Throwable public void printStackTrace() public void printStackTrace(PrintStream s) public void printStackTrace(PrintWriter s) Выдача в стандартный или указанный поток полной информации о точке возникновения исключения.
30 Кафедра ОСУ, Java 2004 Обработка исключений Метод getMessage Каждое исключение имеет переменную реализации типа string, которая содержит некоторое сообщение, обычно идентифицирующее причину исключения throw new Exception(message); message -аргумент конструктора Exception Если объект называется е, то вызов метода е.getMessage () возвращает эту строку
31 Кафедра ОСУ, Java 2004 Обработка исключений try{ …. if (a
32 Кафедра ОСУ, Java 2004 Создание собственных классов исключений Общая структура: public class MyException extends Exception { public MyException() {}; public MyException(String msg) { super(msg); } }
33 Кафедра ОСУ, Java 2004 Создание собственных классов исключений public class DivideByZeroException extends Exception{ public DivideByZeroException () { super ("Деление на нуль!"); } public DivideByZeroException(String message){ super(message); } }
34 Кафедра ОСУ, Java 2004 Создание собственных классов исключений public class DivideByZeroExceptionDemo{ private int numerator; private int denominator; private double quotient; public static void main(String [] args){ DivideByZeroExceptionDemo oneTime = new DivideByZeroExceptionDemo(); oneTime.doIt();
35 Кафедра ОСУ, Java 2004 Создание собственных классов исключений public void doIt() { try { System.out.println("Введите числитель:"); numerator = System.in.readLinelnt(); System.out.println("Введите знаменатель:") ; denominator = System.in.readLinelnt();
36 Кафедра ОСУ, Java 2004 Создание собственных классов исключений if (denominator ==0) throw new DivideByZeroException(); quotient = numerator/(double) denominator; System.out.println (numerator + "/" + denominator + " = " + quotient); }
37 Кафедра ОСУ, Java 2004 Создание собственных классов исключений catch(DivideByZeroException e) { System.out.println(e.getMessage()); secondChance() ; } System.out.println("Конец программы."); }// end of doIt
38 Кафедра ОСУ, Java 2004 Создание собственных классов исключений public void secondChance() { System.out.println("Попробуйте еще раз."); System.out.println("Введите числитель:"); numerator = System.in.readLinelnt (); System.out.println("Введите знаменатель:"); System.out.println("Позаботьтесь о том, чтобы знаменатель не был равен нулю."); denominator = System.in.readLineInt()
39 Кафедра ОСУ, Java 2004 Создание собственных классов исключений if (denominator ==0){ System.out.println( "Невозможно выполнить деление на нуль."); System.out.println( "Поскольку вы хотите от меня невозможного,"); System.out.println("программа будет завершена."); System.exit(0); }
40 Кафедра ОСУ, Java 2004 Создание собственных классов исключений quotient = ( (double) numerator)/ denominator; System.out.println (numerator + "/ + denominator + " = " + quotient); } } // end of secondChance
41 Кафедра ОСУ, Java 2004 Использование классов исключений Если метод не перехватывает исключение, он должен по крайней мере предупреждать программистов о том, что любой вызов этого метода может сгенерировать исключение Это предупреждение называется throws-директивой: public void sample( ) throws DivideByZeroException
42 Кафедра ОСУ, Java 2004 Использование классов исключений Те вызов метода sample может сгенерировать исключение класса DivideByZeroException Обработка исключений, генерируемых при вызове метода 1. Исключение перехватывается в catch- блоке внутри определения метода 2. Обработка осуществляется внутри класса или метода, вызывающего данный метод (throws-директива необходима)
43 Кафедра ОСУ, Java 2004 Использование классов исключений Если метод генерирует исключение, и это исключение не перехватывается внутри метода, то выполнение метода будет завершено сразу после генерации исключения Example
44 Кафедра ОСУ, Java 2004 Использование классов исключений Если переопределяется некоторый метод в производном классе, то throws-директива переопределенного метода не может содержать какие бы то ни было классы исключений, которые отсутствуют в throws – директиве того же метода базового класса. (меньше можно)
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.