close

Вход

Забыли?

вход по аккаунту

?

Разработка на JAVA. Лекция 4

код для вставкиСкачать
Исключения.
Обработка ошибок.
Архангельский Дмитрий
Кильдиев Рустам
“
2
Обратная связь
обратную связь можно оставить на портале к
каждому занятию;
обратная связь позволяет оценить лекцию с
другой стороны и что-то поменять;
нам хочется сделать лекции лучше;
Вопросы задавайте сразу!
3
Планы
●
●
●
●
●
●
подходы к обработке ошибок
try-catch
checked/unchecked исключения
ошибки программиста
создание своих исключений
finally
4
Подходы к обработке ошибок
Ваши предложения?
5
Подходы к обработке ошибок
●
игнорировать :(
6
Подходы к обработке ошибок
●
●
игнорировать :(
хранить где-то код ошибки (ERRNO)
7
Подходы к обработке ошибок
●
●
●
игнорировать :(
хранить где-то код ошибки (ERRNO)
механизм исключений
Исключение - сущность, которая хранит
информацию об ошибке, причине возникновения.
Исключение - это объект. У него есть
конструктор.
8
Exception
Exception in thread "main" java.lang.IllegalArgumentException: Arg str must be non-null
at arhangel.dim.lections.exception.ExceptionDemo.convertString(ExceptionDemo.java:11)
at arhangel.dim.lections.exception.ExceptionDemo.main(ExceptionDemo.java:16)
9
Exception
package java.lang;
public class Exception extends Throwable {
public Exception(String message) {
super(message);
}
}
...
if (something_is_very_bad) {
throw new Exception(“Failed: validation”);
}
10
Иерархия
11
Типы
Наследники RuntimeException
Unchecked (непроверяемые)
Наследники Exception
Checked (проверяемые)
12
Сравним
ArrayIndexOutOfBoundsException
IOException
ClassCastException
FileNotFoundException
IllegalArgumentException
ParseException
IllegalStateException
ClassNotFoundException
NullPointerException
CloneNotSupportedException
NumberFormatException
InstantiationException
AssertionError
InterruptedException
ExceptionInInitializerError
NoSuchMethodException
StackOverflowError
NoSuchFieldException
NoClassDefFoundError
13
Сравним
UNCHECKED
CHECKED
ArrayIndexOutOfBoundsException
IOException
ClassCastException
FileNotFoundException
IllegalArgumentException
ParseException
IllegalStateException
ClassNotFoundException
NullPointerException
CloneNotSupportedException
NumberFormatException
InstantiationException
AssertionError
InterruptedException
ExceptionInInitializerError
NoSuchMethodException
StackOverflowError
NoSuchFieldException
NoClassDefFoundError
14
Правило
UncheckedException - это ошибка разработчика!
Мы не кидаем стандартные unckecked исключения
в коде
Плохо!
throw new NullPointerException(“Invalid arg”);
15
Проверяемые исключения
public static void main(String[] args) {
try {
int count = Integer.parseInteger(args[0]);
System.out.println("Value parsed :" + count);
} catch(NumberFormatException e) {
System.out.println(“Failed to parse:” + args[0]);
// Ask user to input value again or use default
}
}
16
Проверяемые исключения
try-catch блок не транзакционный, то есть
действия в блоке try, выполненные до
возникновения Exception автоматически не
откатываются.
17
Проверяемые исключения
public int parse(String arg) throws
NumberFormatException {
int count = Integer.parseInteger(arg);
System.out.println("Value parsed :" + count);
}
18
re-throw
Component1
try {
Reader reader =...
reader.readConfig();
} catch (IOException e) {
log.error(“Failed to read config”)
throw new ComponentException(e);
}
19
Проброс исключения
main(): (хотим обработать IllegalArgExc)
m1() throws Exception
m2() throws IllegalArgExc
m3() throws IllegalArgExc, catch IOException
m4() throws IOException, IllegalArgExc
m5() throws IOException
20
finally
Блок выполняется всегда, независимо от того,
сработал catch или нет
try {
Connection conn = DriverManager.getConnection("jdbc:mysql:”);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from my_table");
rs.close();
stmt.close();
conn.close();
} catch (SQLException ex) {
// handle exception
}
21
try-with-resources
java.lang.AutoCloseable
String read0(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
String read1(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}
22
23
Вопросы
http://skipy.ru/technics/exceptions.html - классика
https://habrahabr.ru/post/183322/ дискуссия (читать
комментарии от cheremin !!!)
https://habrahabr.ru/post/178405/ - закрытие
ресурсов
24
Reflection API
Level I
java.lang.reflect
Методы, которые позволяют
●
●
●
●
●
●
класс объекта
конструкторы, методы, поля
модификаторы доступа
создать экземпляр
вызвать метод
установить поле (даже private)
26
class Class
Метаданные о конкретном классе
● имя
● поля
● методы
● уровни доступа к методам и полям
● конструкторы
27
Получение объекта Class
// есть объект
MyClass my = new MyClass();
Class clazz = my.getClass();
// есть тип
Class clazz = MyClass.getClass();
// есть имя
Class clazz = Class.forName(“java.util.
HashMap”);
28
29
Задача - контейнер классов
●
●
●
классы содержат поля, поля могут быть
примитивными типами или ссылками на объекты
других классов (зависимости);
зависимости описаны в xml;
классы нужно инициализировать в правильном
порядке;
Требуется:
● считать xml и разобрать его (получить список beans)
● отсортировать список в порядке инициализации
● создать объекты классов
30
Репозиторий курса
https://github.com/arhangeldim/messenger
Wiki
https://github.com/arhangeldim/messenger/wiki
Канал курса на slack - пригласим по email
31
Спасибо за
внимание!
Автор
tekhnostrim
Документ
Категория
Без категории
Просмотров
460
Размер файла
538 Кб
Теги
лекция
1/--страниц
Пожаловаться на содержимое документа