Download - Java. Exceptions - how to cook, how to eat
Exceptions -how to cook, how to eat
1Exceptions: how to cook, how to eat
Общие понятия
• Во время выполнения программы могут возникать ситуации, когда:
• - состояние данных, • - устройств• - или компьютерной системы в целом
делает дальнейшие вычисления невозможными или бессмысленными.
2Exceptions: how to cook, how to eat
Что делать?
• Как сообщить компьютерной системе, что в процессе ее работы произошел«глобальный трындец» ?
3Exceptions: how to cook, how to eat
Немного теории
• Весь код пишется программистами(ну, почти весь код)
4Exceptions: how to cook, how to eat
Немного теории
• Если программист попробует предусмотреть обработку всех проблем
5Exceptions: how to cook, how to eat
Немного теории
• Если программист попробует предусмотреть обработку всех проблем,
то на 99.999% его код будет состоять из таких проверок
6Exceptions: how to cook, how to eat
Немного теории
• Если программист «попробует» предусмотреть обработку всех проблем,
то на 99.999% его код будет состоять из таких проверок,
и могие из них, возможно, никогда и не понадобятся.
7Exceptions: how to cook, how to eat
Немного теории
• Проверки будут лишним балластом.
8Exceptions: how to cook, how to eat
Немного теории
• Проверки будут лишним балластом.На их написание будет потрачено время
9Exceptions: how to cook, how to eat
Немного теории
• Проверки будут лишним балластом.На их написание будет потрачено время,на их тестирование будет потрачено еще больше времени.
10Exceptions: how to cook, how to eat
Немного теории
• Проверки будут лишним баластом.На их написание будет потрачено время,на их тестирование будет потрачено еще больше времени,и нам не хватит времени на тестирование основной логики.
11Exceptions: how to cook, how to eat
Немного теории
• Программист при написании кода чаще всего применяет оптимистический подход:
• Все будет хорошо
12Exceptions: how to cook, how to eat
Немного примеров
• Нам надо сделать ОЧЕНЬ простую операцию
C = A + B
13Exceptions: how to cook, how to eat
C = A + B
int sum(int a, int b) {return a+b;
}
• Это подход оптимиста
14Exceptions: how to cook, how to eat
C = A + BДругой подход
int sum(int a, int b) { long c = a + b; if (c > Integer.MAX_INT) return ? ; // а что мне вернуть? if (c < Integer.MIN_INT) { return ? ; // а что мне вернуть?
return a+b;}
Все ли мы предусмотрели?
15Exceptions: how to cook, how to eat
C = A + BА если у нас не хватит памяти?
int sum(int a, int b) { long c = a + b; if (c > Integer.MAX_INT) return ? ; // а что мне вернуть? if (c < Integer.MIN_INT) { return ? ; // а что мне вернуть?
return a+b;}
16Exceptions: how to cook, how to eat
C = A + BА если ....?
Невозможно предусмотреть все «ЕСЛИ» которые могут случиться в программе.
17Exceptions: how to cook, how to eat
Во всех компьютерных системах
• Во время выполнения программы БУДУТ возникать ситуации, когда:
• - состояние данных, • - устройств• - или компьютерной системы в целом
делает дальнейшие вычисленияневозможными или бессмысленными.
18Exceptions: how to cook, how to eat
Exceptions - это ...
... реакция компьютерной системы на ошибку программиста?
19Exceptions: how to cook, how to eat
Exceptions - это ...
...реакция компьютерной системы на возникновение ситуации, которая делает дальнейшие вычисления невозможными или бессмысленными.
20Exceptions: how to cook, how to eat
Немного теории
• Разработчик пишет код так, как если бы в нём не случались ошибки.
21Exceptions: how to cook, how to eat
Немного теории
• Разработчик пишет код так, как если бы в нём не случались ошибки.
• За обработку ошибок отвечает некоторый заранее определённый код, который знает, как обработать исключительную ситуацию.
22Exceptions: how to cook, how to eat
Немного теории
• Метод обработки исключительных ситуаций может быть различный.
• Место обработки исключительных ситуаций может находиться на удалении от места ее возникновения.
23Exceptions: how to cook, how to eat
Немного теории
• Реакция системы на исключительную ситуацию может быть различная
24Exceptions: how to cook, how to eat
Немного теории
• Реакция системы на исключительную ситуацию может быть различная:
• от полного игнорирования и замалчивания
25Exceptions: how to cook, how to eat
Немного теории
• Реакция системы на исключительную ситуацию может быть различная:
• от полного игнорирования и замалчивания• до полной остановки всей компьютерной
системы.
26Exceptions: how to cook, how to eat
Немного теории
• Реакция системы на исключительную ситуацию может быть различная:
• от полного автоматического ремонта системы
27Exceptions: how to cook, how to eat
Немного теории
• Реакция системы на исключительную ситуацию может быть различная:
• от полного автоматического ремонта системы
• до симптомов психозов, шизофрении и раздвоения личности
28Exceptions: how to cook, how to eat
Немного теории
• Реакция системы на исключительную ситуацию может быть различная:
• от полного автоматического ремонта системы
• до симптомов психозов, щизофрении и раздвоения личности - как у программы, так и у команды тестирования.
29Exceptions: how to cook, how to eat
Exceptions
• Виды и среда обитания
30Exceptions: how to cook, how to eat
Exceptions
• java.lang.NullPointerException
31Exceptions: how to cook, how to eat
Exceptions
• java.lang.NullPointerException
Когда и почему?Приложение пытается использовать обьект, который имеет значение null
32Exceptions: how to cook, how to eat
Exceptions
• java.lang.NullPointerException
Причины возникновения:- программист не присвоил значение обьекту,- не инициализирована база данных,...
33Exceptions: how to cook, how to eat
Exceptions
• java.lang.ClassCastException
34Exceptions: how to cook, how to eat
Exceptions
• java.lang.ClassCastException
Когда и почему?Приложение пытается преобразовать объект к типу, которым он не может являться.
35Exceptions: how to cook, how to eat
Exceptions
• java.lang.ClassCastException
Причины возникновения:ожидали одно, а кто-то подсунул другое...
36Exceptions: how to cook, how to eat
Exceptions
• java.lang.ClassNotFoundException
37Exceptions: how to cook, how to eat
Exceptions
• java.lang.ClassNotFoundException
Когда и почему?Приложение не нашло нужный ему класс
38Exceptions: how to cook, how to eat
Exceptions
• java.lang.ClassNotFoundException
Причины возникновения:- неправильно собранное приложение,- ошибка в конфигурации,- не добавлена/не доступна библиотека,- библиотека не той версии,...
39Exceptions: how to cook, how to eat
Exceptions
• java.lang.IndexOutOfBoundsException
40Exceptions: how to cook, how to eat
Exceptions
• java.lang.IndexOutOfBoundsException
Когда и почему?Доступ к элементу массива по индексу большему, чем размер массива.
41Exceptions: how to cook, how to eat
Exceptions
• java.lang.IndexOutOfBoundsException
Причины возникновения:...
42Exceptions: how to cook, how to eat
Exceptions
• java.lang.StackOverflowError• java.lang.OutOfMemoryError
43Exceptions: how to cook, how to eat
Exceptions
• java.lang.StackOverflowError• java.lang.OutOfMemoryError
Когда и почему?Все закончилось, больше нету
44Exceptions: how to cook, how to eat
Exceptions
• java.lang.StackOverflowError • java.lang.OutOfMemoryError
Причины возникновения:бесконечная рекурсия или цикл...
45Exceptions: how to cook, how to eat
Exceptions
• java.lang.RuntimeException
46Exceptions: how to cook, how to eat
Exceptions
• java.lang.RuntimeException
Когда и почему? Что-то не так
47Exceptions: how to cook, how to eat
Exceptions
• java.lang.RuntimeException
Причины возникновения:Различные...
48Exceptions: how to cook, how to eat
Exceptions
• Application specific exception
49Exceptions: how to cook, how to eat
Exceptions
• Application specific exception
Что это?my.application.infrastructure.ApplicationException
50Exceptions: how to cook, how to eat
Exceptions
• Где их искать?
51Exceptions: how to cook, how to eat
Exceptions
• Где их искать?– в результатах автоматического тестирования– глазами в работающем приложении
• Где еще?– Application console– Application logs– Tests env. logs
52Exceptions: how to cook, how to eat
Exceptions -how to cook, how to eat
time to discuss
53Exceptions: how to cook, how to eat