Вы находитесь на странице: 1из 10

captain

member1;a
member2;b
member3;c

Капитан команды - Игорь Блинов


Члены команды: Брюс Эккель, Сергей Жогаль, Виктория Гегель.
Любая дополнительная информация
при необходимости.

1. Что такое исключения?

2. Какие действия производит система времени выполнения при возникновении


исключения?

3. Как называется блок кода, который обрабатывает исключение?

4. Как реализуется требование «Поймай или Укажи» (Catch or Specify)?

5. Какая иерархия классов исключений?

6. Какие виды исключений относятся к непроверяемым?

7. Какие компоненты могут входить в обработчик исключений?

8. Для каких ситуаций используется оператор try-with-resources?

9. Какой код заключается в блок try?

10. Выполняется ли весь код блока try в случае возникновения исключения?

11. Может ли использоваться только один блок try (без catch или finally)?

12. Какое назначение блока catch?

13. Сколько блоков catch может содержаться после try-оператора?

14. Если применяется несколько блоков catch, то в каком порядке в случае


возникновения исключения они вызываются?

15. Какой код может быть между блоками try и catch?

16. Может ли использоваться блок catch без блока try?


17. Сколько типов исключений может обрабатывать один блок catch?

18. В случае отсутствия исключения в блоке try выполняется ли блок catch?

19. Для чего используется блок finally?

20. В случае отсутствия исключения в блоке try выполняется ли блок finally (при его
наличии)?

21. Могут ли использоваться блоки try-finally без блока catch?

22. Приведите пример кода, в котором используется оператор try-with-resources.

23. Какой оператор может использоваться вместо try-with-resources?

24. Может ли применяться оператор try-with-resources совместно с блоком finally?

25. Какое ключевое слово используется в сигнатуре метода, чтобы указать на


возможность выбрасывания им исключения?

26. Сколько исключений может выбрасывать метод?

27. Какое ключевое слово используется для гарантированного выбрасывания


исключения?

28 Можно ли создавать свои собственные классы исключений?

29. Приведите примеры наиболее известных подклассов класса Exception.

30. Приведите примеры наиболее известных подклассов класса RuntimeException.

31. Что такое сцепление исключений?

32. Приведите пример кода со сцеплением исключений.

33. Какая информация приводится при трассировке стека во время исключения?

34. В каких случаях целесообразно создавать собственный класс исключения?

35. Какой класс исключений может использоваться в качестве суперкласса для


собственного исключения?

36. Какие исключения целесообразно делать проверяемыми, а какие –


непроверяемыми?

37. Какие преимущества в механизме выбрасывания и обработки исключений?

38. Можно ли выбрасывать исключения в конструкторах?


39. Может ли произойти потеря исключения? Если да – приведите пример.

40. Обладают ли исключения свойством транзакционности?

41. Является ли данный код антипаттерном?


Обоснуйте ответ.
void methodCatchesSomeException() {
...
try {
...
} catch (SomeException ex) {
...
}
...
}

42. Является ли данный код антипаттерном?


Обоснуйте ответ.
void methodThrowsSomeCheckedException() {
...
throw new SomeCheckedException();
...
}

43. Является ли данный код верным? Укажите почему.


void methodThrowsSomeCheckedException() throws SomeCheckedException {
...
throw new SomeCheckedException();
...
}

44. Приведите примеры кода с выбросом RuntimeException явным образом и в случае


программной ошибки.

45. Можно ли отрефакторить данный код? Если да, то выполните.


void methodThrowsSomeRuntimeException() {
...
throw new SomeRuntimeException();
...
}

46. Является ли данный код антипаттерном?


Обоснуйте ответ.
void methodThrowsSomeRuntimeException() throws SomeRuntimeException {
...
throw new SomeRuntimeException();
...
}

47. В какой версии Java появился оператор try-with-resources? Приведите пример кода
с использованием указанного оператора.

48. Является ли данный код антипаттерном?


Обоснуйте ответ.
void methodWithAutocloseableInstance() {
...
try(SomeResource res = new SomeResource(...)) {
...
}
...
}

49. Является ли данный код антипаттерном?


Обоснуйте ответ.
void methodWithAutocloseableInstance() {
...
try(SomeResource res = new SomeResource(...)) {
...
} catch (CorrectCheckedException ex) {

}
...
}

50. Является ли данный код антипаттерном?


Обоснуйте ответ.
try {

} catch (SomeException е) {
//no code
}

51. Является ли данный код антипаттерном?


Обоснуйте ответ.
try {

} catch (SomeException е) {
System.out.println(“Something went wrong!”);
}

52. Является ли данный код антипаттерном, если блок catch находится не в конце
раннер-метода main()?
Обоснуйте ответ.
try {

} catch (Exception е) {

}

или другой вариант

try {

} catch (Throwable е) {

}

53. Является ли данный код антипаттерном?


Обоснуйте ответ.
try {
int i = 0;
while(true) {
а[i++].f();
}
} catch(ArraylndexOutOfBoundsException е) {

}

54. Есть ли недостатки у API написанного только с использованием обрабатываемых


исключений?

55. Даны два варианта сеттера.


Какой является более предпочтительным в использовании?
Обоснуйте ответ.
Вариант 1.
void setPositiveValue(int value) {
if(value <= 0) {
throw new IllegalArgumentException(...);
}
this.value = value;
}
Вариант 2.
void setPositiveValue(int value) throws SomeCheckedException {
if(value <= 0) {
throw new SomeCheckedException(...);
}
this.value = value;
}

56. Приведите пример наиболее распространенных из повторно используемых


исключений и причины их применения.
57. Если недостаточно информации для принятия решения и...
1) исключительная ситуация должна быть исправлена на ближайшем уровне;
2) исключительная ситуация маловероятна
Экземпляры подклассов каких типов исключений целесообразно сгенерировать в
каждом случае?

58. Выделите в блоке try-catch основной и альтернативный сценарии.


Обоснуйте ответ.
try {
...
User user = source.getUser(login, password);
if(GUEST_USER.equals(user) {

} else {

}
...
} catch (SourceException е) {

}
class Source {
public User getUser(String login, String password) throws SourceException {
...
throw new SourceException(...);
...
return GUEST_USER; //wrong login or password
...
return new User(...);
}
...
}

59. Перепишите код предыдущего задания с условием, что ввод неправильных логина
или пароля является альтернативным сценарием.

60. Что такое трансляция исключения, когда ее используют и какие правила ее


использования? Приведите пример трансляции исключения.

61. Как можно избежать использования трансляций и зачем нужно это


предпринимать?

62. В каких случаях надо предпочесть сцепление трансляции?

63. Можно ли для исключительной ситуации определить, класс, который не является


подклассом Exception, RuntimeException, Error.
Если да, то как он будет себя проявлять (как checked-exception или как unchecked-
exception)?
64. Обязательно ли информацию об исключительное ситуации представлять
строковым полем?
Если нет, то какой альтернативный способ создания строкового представления
исключения?

65. Если метод завершается сбоем, что нужно сделать с объектом, на котором был
вызван этот метод?

66. Приведите способы достижения атомарности по отношению к сбоям.

67. Приведите пример, когда отсутствие транзакционности в исключениях, приводит к


сохранению ссылки на объект в неверном состоянии.

68. Необходимо создать коллекцию из результатов тестов, находящихся в валидном


файле src/in.csv.
Пример файла
cool;75;90
clever;68;95
looser;30;48
Является ли код, реализующий задание, антипаттерном?
Обоснуйте ответ.

public class Runner {


public static void main(String[] args) {
List<Trial> trials = new ArrayList<Trial>();
try(Scanner sc = new Scanner(new FileReader("src/in.csv"))) {
while(sc.hasNext()) {
Trial trial = getTrial(sc);
trials.add(trial);
}
printTrials(trials);
} catch (FileNotFoundException e) {
System.out.println(Constants.ERROR_FILE_FOUND);
}
}
private static Trial getTrial(Scanner sc) {
String csvLine = sc.nextLine();
String[] values = csvLine.split(Constants.DELIMETER);
try {
String name = values[Constants.NAME_INDEX];
int mark1 = Integer.parseInt(values[Constants.MARK1_INDEX]);
int mark2 = Integer.parseInt(values[Constants.MARK2_INDEX]);
return new Trial(name, mark1, mark2);
} catch (CsvLineException e) {
System.out.println(Constants.ERROR_WRONG_DATA);
}
}
69. Приведите пример кода собственного исключения (реализация в одном классе
всего нижеперечисленного). Класс исключения содержит:
- поле, которым является неправильная строка, считанная из файла (имя
csvLine);
- конструктор по умолчанию, вызывающий конструктор суперкласса;
- параметризованный конструктор, принимающий экземпляр исключения и
неправильную строку, считанную из файла;
- параметризованный конструктор, принимающий строку с указанием причины
исключения и неправильную строку, считанную из файла;
- геттер с возвратом неправильной строки;
- переопределенного метода toString с указанием неправильной строки и метода
вывода сообщения об ошибки.

70. Необходимо создать метод для экспорта csv-файла в коллекцию.


При наличии хотя бы одной ошибки в исходных данных “отменить” создание
коллекции.
Какие антипаттерны содержит следующий код?
Предложите варианты по избавлению от них.
private static List<Trial> getTrials(Scanner sc) {
List<Trial> trials = new ArrayList<Trial>();
try {
while(sc.hasNext()) {
Trial trial = getTrial(sc);
trials.add(trial);
}
} catch (CsvLineException e) {
System.err.println(e);
}
return trials;
}

72. Создать метод для экспорта данных в коллекцию из последовательного источника


экземпляров Trial.
См. код ниже.
Его необходимо дополнить, чтобы происходила обработка следующих
исключительных ситуаций:
1. Файл не найден.
2. Ошибка в csv строке.
Примечание: код не должен нарушать принцип “верхние уровни приложения должны
перехватывать исключения нижних уровней и, в свою очередь, генерировать
исключения, которые можно пояснить в терминах абстракции верхнего уровня”
См. Блох, Д. Java эффективное программирование. 3-е издание. Глава 10
Исключения. Стр 370.
Считается, что классы для исключений созданы и имеют необходимый функционал.
Подсказка:
---
Надо использовать два исключения. Одно из которых будет нижнего уровня, другое
верхнего уровня.
---
Еще одна подсказка:
---
Одно из исключений обрабатываемое, другое нет.
---

//начало кода, реализующего задание


//---
interface TrialProvidable {
boolean hasTrial();
Trial getTrial();
}

public class TrialCsvImpl implements TrialProvidable {


private Scanner sc;
public CsvImpl(String csvName) {
sc = new Scanner(new FileReader(csvName));
}
public boolean hasTrial() {
return sc.hasNextLine();
}
public Trial getTrial() {
// get Trial instance from csv line
return trial;
}
}

public class Runner {


private static List<Trial> getTrials(TrialProvidable trialProvider) {
List<Trial> trials = new ArrayList<Trial>();
while(trialProvider.hasTrial()) {
Trial trial = trialProvider.getTrial();
trials.add(trial);
}
return trials;
}

public static void main(String[] args) {


TrialProvidable trialProvider = null;
try {
if("csv".equals(args[0])) {
trialProvider = new TrialCsvImpl("src/in.csv");
} else {
trialProvider = new TrialDBImpl();
}
List<Trial> trials = getTrials(trialProvider);

} finally {
if (trialProvider != null) {
trialProvider.close();
}
}
}
}
//---
//конец кода, реализующего задание

Оценить