06.09.2004 Кафедра ОСУ, Java 2004 Обработка исключений В Java обработка исключительных ситуаций (exception handling) происходит следующим образом: Либо.

Презентация:



Advertisements
Похожие презентации
1 Обработка исключений в Java Одно из важнейших преимуществ Java – разработанный на уровне языка механизм обработки исключений. Исключение в Java - это.
Advertisements

Обработка исключительных ситуаций Андрей Дмитриев 2008.
Обработка исключительных ситуаций. Синтаксис try{ операторы0; } catch (ТипИсключения1 переменная1){ операторы1; } catch (ТипИсключения2 переменная2){
Исключения в Java. Исключения – это механизм взаимодействия между кодом, приведшим к ошибке, и кодом, обрабатывающим ошибку Исключение выбрасывается (throw),
Saint Petersburg, 2011 Java Lecture #06 Exceptions.
Часть 1. Основы ООП Исключения.. Структурный подход Неисправимые ошибки – вывести информацию и умереть. Исправимые ошибки – уведомить вызывающую.
Новосибирск, 2004 (С) Всеволод Рылов, все права защищены 1 Основы программирования на языке Java Обработка исключений.
Test 6 Вопрос 1. Как можно уничтожить объект в Java? a)присвоить null всем ссылкам на объект b)вызвать Runtime.getRuntime().gc() c)вызвать метод finalize()
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Java: интерфейсы, наследование, обработка исключительных ситуаций Вашенков Олег Евгеньевич.
Изучение динамического определения типов. Класс Class. Динамическая загрузка и инстанцирование классов. В Java вся информация о классе хранится в специальном.
Кафедра ОСУ, Java 2004 Слайд 1 Наследование Наследование позволяет использовать существующий класс для определения новых классов, т.е. способствует.
Программирование Часть 8 Обработка исключений.
1 Классы в Java Ключевое слово class означает: Я говорю тебе, как выглядит новый тип объекта. Класс является базовым элементом объектно-ориентированного.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Исключения в EJB Кряжев Василий
Исключительные ситуации. Схема обработки исключений Try { //охраняемый блок trow (new MyException();) } catch(MyExeption e) { … } catch(Exeption e){ …
b5_java_s4
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – обработка ошибок страниц и приложения, Global.aspx.
Пользовательские действия (custom actions) в JSP. JSTL.
Транксрипт:

Кафедра ОСУ, Java 2004 Обработка исключений В Java обработка исключительных ситуаций (exception handling) происходит следующим образом: Либо сам язык Java, либо код, написанный программистом, обеспечивает механизм, который сигнализирует, когда случается что-то необычное – возбуждение, или генерация исключительной ситуации (throwing an exception).

Кафедра ОСУ, Java 2004 Обработка исключений В программе помещается также код, который непосредственно выполняет обработку исключительной ситуации. Базовый механизм обработки исключительной ситуации реализуется триадой блоков try – throw – catch Если исключение не генерируется, то catch блоки игнорируются.

Кафедра ОСУ, Java 2004 Обработка исключений Исключение в Javaэто объект, который описывает исключительное состояние, возникшее в каком-либо участке программного кода. Когда возникает исключительное состояние, создается объект класса Exception. Этот объект пересылается в метод, обрабатывающий данный тип исключительной ситуации. Исключения могут возбуждаться и «вручную» для того, чтобы сообщить о некоторых нештатных ситуациях

Кафедра ОСУ, Java 2004 Обработка исключений общая форма блока обработки исключений. try { …. // блок кода } throw(e) // возбуждение исключения catch (ТипИсключения1 е) { // обработчик исключений типа // ТипИсключения1 } catch (ТипИсключения2 е) { // обработчик исключений типа //ТипИсключения2 throw(e) // повторное возбуждение //исключения } finally { }

Кафедра ОСУ, Java 2004 Обработка исключений Сначала выполняется код, заключенный в фигурные скобки оператора try. Если во время его выполнения не происходит никаких нештатных ситуаций, то далее управление передается за закрывающую фигурную скобку последнего оператора catch, ассоциированного с данным оператором try.

Кафедра ОСУ, Java 2004 Обработка исключений Если в пределах try возникает исключительная ситуация, то далее выполнение кода производится по одному из нижеперечисленных сценариев:

Кафедра ОСУ, Java 2004 Обработка исключений производится выполнение блока кода, ассоциированного с данным catch если код в этом блоке завершается нормально, то и весь оператор try завершается нормально если код в catch завершается нештатно, то и весь try завершается нештатно по той же причине если возникла исключительная ситуация, класс которой не указан в качестве аргумента ни в одном catch, то выполнение всего try завершается нештатно

Кафедра ОСУ, Java 2004 Обработка исключений Оператор finally предназначен для того, чтобы обеспечить гарантированное выполнение какого-либо фрагмента кода, вне зависимости от того, возникла ли исключительная ситуация если блок finally завершается ненормально, то весь try завершится ненормально по той же причине.

Кафедра ОСУ, Java 2004 Обработка исключений Программист сам может явно сгенерировать ошибку с помощью оператора throw. public int calculate(int theValue) throws Exception { if( theValue < 0) { throw new Exception( "Some descriptive info"); } }

Кафедра ОСУ, Java 2004 Обработка исключений В вершине иерархии исключений стоит класс Throwable. Каждый из типов исключений является подклассом класса ThrowableThrowable Подкласс Ехceptionиспользуется для описания исключительных ситуаций, которые должны перехватываться программным кодом пользователя.

Кафедра ОСУ, Java 2004 Обработка исключений Подкласс Error, предназначен для описания исключительных ситуаций, которые при обычных условиях не должны перехватываться в пользовательской программе Объекты-исключения автоматически создаются исполняющей средой Java в результате возникновения определенных исключительных состояний

Кафедра ОСУ, 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)

Кафедра ОСУ, 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"); } } }

Кафедра ОСУ, 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; }

Кафедра ОСУ, Java 2004 Обработка исключений catch (ArithmeticException e) { System.out.println("div by 0: " + e.getMessage()); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("array index c:"+ e.getMessage()); } } }

Кафедра ОСУ, 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

Кафедра ОСУ, Java 2004 Обработка исключений Если в конструкции обработки исключений используется несколько операторов catch классы исключений нужно перечислять в них последовательно, от менее общих к более общим. Наиболее специализированные классы исключений должны идти первыми, поскольку ни один подкласс не будет достигнут, если поставить его после суперкласса.

Кафедра ОСУ, Java 2004 Обработка исключений Исключение генерируется по одной из трех причин: 1. Виртуальной машиной языка Ява было обнаружено ошибочное состояние формула оценки выражения нарушает нормальную семантику языка Ява ошибка происходит при загрузке или компоновке части Ява- программы

Кафедра ОСУ, Java 2004 Обработка исключений некий ограниченный ресурс превышен 2. Оператор throw был выполнен в Ява- коде. 3. В виртуальной машине произошла внутренняя ошибка

Кафедра ОСУ, Java 2004 Обработка исключений Исключения представлены экземплярами класса Throwable и его подклассов. Все вместе эти классы- классы исключений – делятся на 2 типа 1. Классы проверяемых исключений 2. Классы непроверяемых исключений

Кафедра ОСУ, Java 2004 Обработка исключений Во время компиляции язык Ява проверяет то, что Ява- программа содержит обработчики для проверяемых исключений Классы непроверяемых исключений - это класс RuntimeException и его подклассы, а также класс Error и его подклассы Все оставшиеся классы исключений - классы проверяемых исключений (обязательно нужно перехватывать).

Кафедра ОСУ, Java 2004 Обработка исключений Класс RuntimeException: ArithmeticException ArrayStoreException ClassCastException IllegalArgumentException NumberFormatException IndexOutOfBoundsException NegativeArraySizeException NullPointerException

Кафедра ОСУ, Java 2004 Обработка исключений Стандартные проверяемые исключения: ( для Exception кроме Runtime) ClassNotFoundException IllegalAccessException InstantiationException:

Кафедра ОСУ, Java 2004 Обработка исключений Пакет java.io определяет следующие дополнительные стандартные исключения: IOException EOFException FileNotFoundException

Кафедра ОСУ, Java 2004 Обработка исключений Класс Error : Error базовый класс для исключительных ситуаций, вызванных серьезными сбоями в работе виртуальной машины Java. Если возникла исключительная ситуация типа Error, то возможность продолжения работы программы сомнительна нужно прекращать работу программы и, возможно, переинсталлировать Java. Перехватывать исключения типа Error не нужно.

Кафедра ОСУ, Java 2004 Обработка исключений Класс Error : ошибки загрузки, компоновки, подготовки, контроля или инициализации (экземпляры подкласса LinkageError) ошибки виртуальной машины: генерирует объект, который является экземпляром подкласса класса VirtualMachineError

Кафедра ОСУ, Java 2004 Обработка исключений Ошибки InternalError OutOfMemoryError StackOverflowError UnknownError

Кафедра ОСУ, Java 2004 Обработка исключений Методы класса Throwable Позволяют получить информацию из исключения, наиболее важные из них. public String toString() - Краткое сообщение о исключении. public String getMessage() - Полное сообщение о исключении.

Кафедра ОСУ, Java 2004 Обработка исключений Методы класса Throwable public void printStackTrace() public void printStackTrace(PrintStream s) public void printStackTrace(PrintWriter s) Выдача в стандартный или указанный поток полной информации о точке возникновения исключения.

Кафедра ОСУ, Java 2004 Обработка исключений Метод getMessage Каждое исключение имеет переменную реализации типа string, которая содержит некоторое сообщение, обычно идентифицирующее причину исключения throw new Exception(message); message -аргумент конструктора Exception Если объект называется е, то вызов метода е.getMessage () возвращает эту строку

Кафедра ОСУ, Java 2004 Обработка исключений try{ …. if (a

Кафедра ОСУ, Java 2004 Создание собственных классов исключений Общая структура: public class MyException extends Exception { public MyException() {}; public MyException(String msg) { super(msg); } }

Кафедра ОСУ, Java 2004 Создание собственных классов исключений public class DivideByZeroException extends Exception{ public DivideByZeroException () { super ("Деление на нуль!"); } public DivideByZeroException(String message){ super(message); } }

Кафедра ОСУ, 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();

Кафедра ОСУ, Java 2004 Создание собственных классов исключений public void doIt() { try { System.out.println("Введите числитель:"); numerator = System.in.readLinelnt(); System.out.println("Введите знаменатель:") ; denominator = System.in.readLinelnt();

Кафедра ОСУ, Java 2004 Создание собственных классов исключений if (denominator ==0) throw new DivideByZeroException(); quotient = numerator/(double) denominator; System.out.println (numerator + "/" + denominator + " = " + quotient); }

Кафедра ОСУ, Java 2004 Создание собственных классов исключений catch(DivideByZeroException e) { System.out.println(e.getMessage()); secondChance() ; } System.out.println("Конец программы."); }// end of doIt

Кафедра ОСУ, 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()

Кафедра ОСУ, Java 2004 Создание собственных классов исключений if (denominator ==0){ System.out.println( "Невозможно выполнить деление на нуль."); System.out.println( "Поскольку вы хотите от меня невозможного,"); System.out.println("программа будет завершена."); System.exit(0); }

Кафедра ОСУ, Java 2004 Создание собственных классов исключений quotient = ( (double) numerator)/ denominator; System.out.println (numerator + "/ + denominator + " = " + quotient); } } // end of secondChance

Кафедра ОСУ, Java 2004 Использование классов исключений Если метод не перехватывает исключение, он должен по крайней мере предупреждать программистов о том, что любой вызов этого метода может сгенерировать исключение Это предупреждение называется throws-директивой: public void sample( ) throws DivideByZeroException

Кафедра ОСУ, Java 2004 Использование классов исключений Те вызов метода sample может сгенерировать исключение класса DivideByZeroException Обработка исключений, генерируемых при вызове метода 1. Исключение перехватывается в catch- блоке внутри определения метода 2. Обработка осуществляется внутри класса или метода, вызывающего данный метод (throws-директива необходима)

Кафедра ОСУ, Java 2004 Использование классов исключений Если метод генерирует исключение, и это исключение не перехватывается внутри метода, то выполнение метода будет завершено сразу после генерации исключения Example

Кафедра ОСУ, Java 2004 Использование классов исключений Если переопределяется некоторый метод в производном классе, то throws-директива переопределенного метода не может содержать какие бы то ни было классы исключений, которые отсутствуют в throws – директиве того же метода базового класса. (меньше можно)