Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемВладислава Мынкина
1 Saint Petersburg, 2011 Java Lecture #06 Exceptions
2 Введение типы обработка создание best practice 2
3 Исключительные ситуации Исключение (Exception) – событие, происходящее в процессе выполнения программы, которое нарушает нормальную последовательность операций Применяются для: Информирование о произошедшей ошибке Запрос помощи в непредусмотренной ситуации Типы: Checked exceptions Unchecked / runtime exceptions Errors 3
4 Иерархия 4 Throwable Error Exception RuntimeException IOException SQLException JAXBException NamingException IOException SQLException JAXBException NamingException VirtualMachineError AssertionError ThreadDeath VirtualMachineError AssertionError ThreadDeath NullPointerException IllegalArgumentException UnsupportedOperationException NullPointerException IllegalArgumentException UnsupportedOperationException
5 Checked Exceptions Потомки java.lang.Exception Обязательно: обрабатывать объявлять в сигнатуре метода: public void doSomething() throws SomeException сбрасывать это исключение в теле метода: if (isGoodValue) { throw new SomeException(); } обрабатывать при вызове метода или перебрасывать в метод уровнем выше 5
6 Runtime Exceptions Потомки java.lang.RuntimeException Необязательно: обрабатывать объявлять в сигнатуре метода обрабатывать при вызове метода Сбросить runtime exception можно в любом месте: throw new IllegalArgumentException(argument cannot be null) Обработка нужна, когда можно продолжить работу: String text = "text"; try { System.out.println(text.substring(5)); } catch (StringIndexOutOfBoundsException e) { text = DEFAULT_VALUE; } 6
7 Errors Потомки java.lang.Error Внешние по отношению к приложению исключительные ситуации, как правило, приложение не может предусмотреть или восстановиться после возникновения таких исключений. Например, приложение успешно открывает файл, но из-за неправильной работы ОС не может его прочитать, в этом случае сбрасывается java.io.IOError Обработка нужна только для информирования пользователя 7
8 Пример 1. public class Main { 2. public static void main(String[] args) { 3. for (int i = 0; i
9 Пример 1. public class Main { 2. public static void main(String[] args) { 3. for (int i = 0; i java Main hello world 9
10 Пример 1. public class Main { 2. public static void main(String[] args) { 3. for (int i = 0; i java Main hello world hello world Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at Main.main(Main.java:4) 10
11 Обработка исключительных ситуаций: try – catch – finally Для обработки используется блок try-catch-finally : try { aMethodThrowingPossibleException() } catch (PossibleException e) { e.printStackTrace() } finally { // perform final processing } Необработанное исключение поднимается на уровень выше (в вызвавший метод) Если исключение не будет обработано в методе main(), работа виртуальной машины будет завершена Код в блоке finally будет выполнен в любом случае, даже если: исключение произошло исключение не произошло внутри блока catch была использована команда return 11
12 try – catch – finally Может использоваться без finally, когда нет обязательного к исполнению в любом случае кода Может использоваться без catch, когда не предполагается обработка исключения, но есть обязательный к исполнению код Может содержать несколько catch, расположенных иерархично от более узкого (потомка) к более широкому (родителю) исключению 12
13 Пример обработки 1. public class Main { 2. public static void main(String... args) { 3. try { 4. for (int i = 0; i java Main hello world hello world Wrong index! 13
14 Создание и использование Типы наследуются от класса java.lang.Exception или java.lang.RuntimeException public class MyException extends Exception { public MyException() { super(); } public MyException(String message, Throwable cause) { super(message, cause); } public MyException(String message) { super(message); } public MyException(Throwable cause) { super(cause); } } class A { void doItImmediately() throws MyException { // do smth if (isTrue) { throw new MyException("Cannot do it immediately! I want go away!"); } } } 14
15 Best Practice Желательно использовать имеющиеся исключения, в редких случаях создавая собственные: ConnectionFailedException – существует ConnectException OutOfMoneyException – хорошее бизнес-исключение Исключения типа Error лучше не обрабатывать Использовать только там, где это необходимо Checked exceptions – для восстанавливаемых ситуаций, unchecked exceptions – для ошибок программы Избегать ненужного использования checked exceptions (для проверки состояний и т.д.) Документировать все исключения, бросаемые в throws XXXException Добавлять информацию в сообщения 15
16 References J. Bloch. Effective Java: Programming Language Guide, Chapter 8 – Exceptions B. Eckel. Thinking in Java, Chapter 9 – Error handling with exceptions 16
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.