Задание для "Java Школа 16" от Сбера
- Проверить состояние счета
- Снять/ положить деньги
Доступ к терминалу (терминал для одного счета) предоставляется только после ввода корректного пин-кода (4 цифры). Каждое нажатие должно восприниматься системой как ввод очередного символа пин-кода. При вводе нецифрового символа система должна выдать предупреждение, но при этом данное действие не считается критичной ошибкой ввода и состояние системы должно восстановиться к последнему корректному состоянию.
При вводе 3 неправильных пин-кодов аккаунт блокируется на 10 сек (при попытке обратиться к нему в течение этого времени должно вызываться исключение AccountIsLockedException c информацией об оставшемся времени до снятия блокировки).
Класть и снимать деньги можно только, если сумма кратна 100.
Поскольку банкоматы, установленные на улице, сами «ничего не делают» с вашим счетом (они лишь делают проверку введенных данных и отправляют запросы на удаленный), то сервер (TerminalServer) может вызывать свои исключения, например, при недостатке средств на счете для совершения операции.
Класс терминал может содержать следующие поля:
class TerminalImpl {
private final TerminalServer server;
private final PinValidator pinValidator;
...
}Часть команд терминал делегирует этим классам.
Интерфейс терминала и список исключений остается на ваш дизайн. В каждом ексепшене должно быть описание, что нужно сделать, чтобы избежать его в дальнейшем.
TerminalServer и PinValidator могут кидать свои собственные исключения. Конечный пользователь не должен видеть эти исключения, ему должны показываться человеко-читабельные сообщения об ошибках
Логика по показу сообщений конечному пользователю и бизнес логика терминала с обработкой исключений должна быть в разных классах, чтобы можно было легко менять интрефейс вывода сообщений (на консоль, через графический интерфейс и т.д.)
2. Реализуйте метод readContent(String url), который отображает на экран содержимое сайта, ссылка на который задаётся параметром url.
Напишите программу, считывающую из консоли строку (URL ресурса) и вызывающую метод readContent. В том случае, если введённый URL неправильного формата или нет доступа до указанного ресурса, пользователю предлагается повторить ввод.
try {
} finally {
}Правильно
catch (Exception e) {
}Что не так с использованием такого обработчика?
Перехватывает все исключения, которые являются производными класса Exception. То есть вообще почти все. И будет не ясно, какое именно исключение у нас произошло.
try {
} catch (Exception e) {
} catch (ArithmeticException a) {
}
Этот код не скомпилируется. Причина в том, что блок catch (ArithmeticException a) никогда не будет достигнут.
-
int[] A; A[0] = 0;
-
JVM начинает запускать вашу программу, но обнаруживает, что не может найти классы Java платформы;
-
программа читает входной поток и достигает маркера конца потока;
-
после достижения маркера конца входного потока, но до закрытия самого потока, программа пытаться считать данные.
-
ошибка;
-
проверяемое исключение;
-
ошибка компиляции;
-
исключение не произойдёт.
| int[] A; A[0] = 0; | ошибка компиляции; |
|---|---|
| JVM начинает запускать вашу программу, но обнаруживает, что не может найти классы Java платформы; | ошибка; |
| программа читает входной поток и достигает маркера конца потока; | исключение не произойдёт. |
| после достижения маркера конца входного потока, но до закрытия самого потока, программа пытаться считать данные. | проверяемое исключение; |