Главная страница

Ревью исключения. Что такое исключение Для чего они нужны


Скачать 55.65 Kb.
НазваниеЧто такое исключение Для чего они нужны
АнкорРевью исключения
Дата24.12.2022
Размер55.65 Kb.
Формат файлаdocx
Имя файлаexceptionReview.docx
ТипПрограмма
#861328

Что такое исключение? Для чего они нужны? 

Исключение — это проблема (ошибка), возникающая во время выполнения программы. Исключения могут возникать во многих случаях, например:

Пользователь ввел некорректные данные.

Файл, к которому обращается программа, не найден.

Сетевое соединение с сервером было утеряно во время передачи данных. И т.д.

Все исключения в Java являются объектами. Поэтому они могут порождаться не только автоматически при возникновении исключительной ситуации, но и создаваться самим разработчиком.


Расскажи про иерархию исключений?

Исключения делятся на несколько классов, но все они имеют общего предка — класс Throwable, потомками которого являются классы Exception и Error.

Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM. Например, исключения такого рода возникают, если закончилась память доступная виртуальной машине.

Исключения (Exceptions) являются результатом проблем в программе, которые в принципе решаемы, предсказуемы и последствия которых возможно устранить внутри программы. Например, произошло деление целого числа на ноль.

Нужно ли ловить Error исключения? 

Ошибки класса Error представляют собой наиболее серьёзные проблемы уровня JVM. Например, исключения такого рода возникают, если закончилась память доступная виртуальной машине. Обрабатывать такие ошибки не запрещается, но делать этого не рекомендуется.

В чём разница между проверяемыми исключениями и непроверяемыми? В чём разница с точки зрения синтаксиса и идеологическая при использовании?

В Java все исключения делятся на два типа:

checked (контролируемые/проверяемые исключения) должны обрабатываться блоком catch или описываться в заголовке метода (например, throws IOException). Наличие такого обработчика/модификатора в заголовке метода проверяется на этапе компиляции;

unchecked (неконтролируемые/непроверяемые исключения), к которым относятся ошибки Error (например, OutOfMemoryError), обрабатывать которые не рекомендуется и исключения времени выполнения, представленные классом RuntimeException и его наследниками (например, NullPointerException), которые могут не обрабатываться блоком catch и не быть описанными в заголовке метода.

https://javarush.com/groups/posts/1944-iskljuchenija-checked-unchecked-i-svoi-sobstvennihe


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

Как бросить исключение? Можно ли бросить НЕ новое исключение? 

Это оператор throw. Нет, так как исключения являются классами.


Расскажи про информацию, которая находится внутри исключения? Как с ней работать?

Причина ошибки(cause)

Возможно, присутствует сообщение об ошибке.

StackTrace - список методов, которые были вызваны до момента, когда в приложении произошло исключение.

Список подавленных исключений

Используя метод getStackTrace() можно получить массив элементов StackTraceElement, каждый из которых содержит информацию об одном методе. Все элементы вместе и образуют stack trace.


Какую информацию можно получить из StackTraceElement?

StackTraceElement хранит информацию по одному элементу stack trace — т.е. по одному методу из StackTrace. Используется как массив элементов StackTrace.


Что такое Heap и Stack память в Java? Какая разница между ними?

Heap (куча) используется Java Runtime для выделения памяти под объекты и классы. Создание нового объекта также происходит в куче. Это же является областью работы сборщика мусора. Любой объект, созданный в куче, имеет глобальный доступ и на него могут ссылаться из любой части приложения.

Stack (стек) это область хранения данных также находящееся в общей оперативной памяти (RAM). Всякий раз, когда вызывается метод, в памяти стека создается новый блок, который содержит примитивы и ссылки на другие объекты в методе. Как только метод заканчивает работу, блок также перестает использоваться, тем самым предоставляя доступ для следующего метода. Размер стековой памяти намного меньше объема памяти в куче. Стек в Java работает по схеме LIFO (Последний-зашел-Первый-вышел).

Что такое подавленные исключения? Как достать подавленное исключение?

Подавленное исключение — это исключение, которое выбрасывается, но каким-то образом игнорируется. Распространенный сценарий для этого в Java — это когда блок finally создает исключение, а любое исключение, первоначально возникшее в блоке try, подавляется.

Получить доступ к подавленному исключению возможно, например, если использовать метод addSuppressed() в блоке finally и передать в качестве параметра исходное исключение из блока catch через промежуточную переменную, что бы исключение не потерялось.


Расскажи про конструкцию try-catch-finally?

try — данное ключевое слово используется для отметки начала блока кода, который потенциально может привести к ошибке. catch — ключевое слово для отметки начала блока кода, предназначенного для перехвата и обработки исключений в случае их возникновения. finally — ключевое слово для отметки начала блока кода, который является дополнительным. Этот блок помещается после последнего блока catch. Управление передаётся в блок finally в любом случае, было выброшено исключение или нет.


Что такое try-with-resources? Как работает эта конструкция?

Данная конструкция, которая появилась в Java 7, позволяет использовать блок try-catch не заботясь о закрытии ресурсов, используемых в данном сегменте кода. Ресурсы объявляются в скобках сразу после try, а компилятор уже сам неявно создаёт секцию finally, в которой и происходит освобождение занятых в блоке ресурсов. Под ресурсами подразумеваются сущности, реализующие интерфейс java.lang.Autocloseable.


Возможно ли использование блока try-finally (без catch)?

Такая запись допустима, но смысла в такой записи не так много, всё же лучше иметь блок catch, в котором будет обрабатываться необходимое исключение.


Можно ли одном catch обработать несколько исключений?

В Java 7 стала доступна новая языковая конструкция, с помощью которой можно перехватывать несколько исключений одним блоком.
Расскажи, как правильно ловить исключения? Иерархия catch блоков


Какое правило должно соблюдаться при использовании нескольких блоков catch (с одним try)?

Исполняется только тот, который первым соответствует типу исключения.

Используется правило перехвата: сначала более конкретные исключения за ними следуют менее конкретные (более общие).


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

В одном блоке нельзя ловить исключения предка и потомка (наследников класса). В этом случае, в список исключений нужно добавить исключения предка, так как он также будет ловить исключения типа потомка.

О чем говорит ключевое слово throws?

Модификатор throws прописывается в заголовке метода и указывает на то, что метод потенциально может выбросить исключение с указанным типом.


Как написать собственное («пользовательское») исключение?

Необходимо унаследоваться от базового класса требуемого типа исключений (например, от Exception или RuntimeException).


Что вы знаете о OutOfMemoryError?

OutOfMemoryError выбрасывается, когда виртуальная машина Java не может создать (разместить) объект из-за нехватки памяти, а сборщик мусора не может высвободить достаточное её количество.

Область памяти, занимаемая java процессом, состоит из нескольких частей. Тип OutOfMemoryError зависит от того, в какой из них не хватило места:

java.lang.OutOfMemoryError: Java heap space: Не хватает места в куче, а именно, в области памяти в которую помещаются объекты, создаваемые в приложении программно. Обычно проблема кроется в утечке памяти. Размер задается параметрами -Xms и -Xmx.

java.lang.OutOfMemoryError: PermGen space: (до версии Java 8) Данная ошибка возникает при нехватке места в Permanent области, размер которой задается параметрами -XX:PermSize и -XX:MaxPermSize.

java.lang.OutOfMemoryError: GC overhead limit exceeded: Данная ошибка может возникнуть как при переполнении первой, так и второй областей. Связана она с тем, что памяти осталось мало и сборщик мусора постоянно работает, пытаясь высвободить немного места. Данную ошибку можно отключить с помощью параметра -XX:-UseGCOverheadLimit.

java.lang.OutOfMemoryError: unable to create new native thread: Выбрасывается, когда нет возможности создавать новые потоки.


Всегда ли исполняется блок finally?

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


Существуют ли ситуации, когда блок finally не будет выполнен?

Например, когда JVM «умирает» - в такой ситуации finally недостижим и не будет выполнен, так как происходит принудительный системный выход из программы:


Может ли метод main() выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?

Может и оно будет передано в виртуальную машину Java (JVM).

Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?

Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок catch(Exception ex) {}, иначе все дальнейшие блоки catch() уже ничего не смогут обработать, т.к. любое исключение будет соответствовать обработчику catch(Exception ex).

Таким образом, исходя из факта, что FileNotFoundException extends IOException сначала нужно обработать FileNotFoundException, а затем уже IOException:
Оглавление

Что такое исключения 7

Что такое Error? В каком случае используется Error. Приведите пример Error’а. 7

Можно/нужно ли обрабатывать ошибки jvm? 8

О чем говорит ключевое слово throws? 8

 В чем особенность RuntimeException? 8

Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения? 8

Чем отличаются исключения от обычных классов? 8

Все ключевые слова и всё что с ними связано. 8

Всё исключения и как генерировать различные виды исключений. 8

Как создать, выбросить, поймать свое исключение? 9

Где возможно вызывать исключения? 9

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

Обязателен ли блок finally? Конструкция try-finally 9

А catch? 9

Когда будет выполнен finally? 9

Когда не будет выполнен (4 случая)? 10

Разница try catch и if 10

Какой return вернется из try или finaly? 10

Что если в конструкции try finally вылетело исключение сначала в try а потом в finally? 10

Какое исключение вылетит? 10

Что будет с другим? 10

Расскажи про информацию, которая находится внутри исключения? 10

Как с ней работать? Что возвращает getStackTrace()? 11

Какую информацию можно получить из StackTraceElement? 11

Что такое Стек? 11

Какое правило должно соблюдаться при использовании нескольких блоков catch (с одним try)? 11

Какое правило должно соблюдаться при попытке поймать несколько исключений в одном catch? 11

Зачем создавать свой класс и наследовать его от Exception? 11

Что такое ошибка, а что такое исключительная ситуация? 12

Что нужно делать программисту, если в коде происходит деление на ноль? 12

От каких классов Throwable и его подклассов нельзя наследоваться? 12

Можно ли так написать try { throw new Object(); }? 12

В чём разница между проверяемыми исключениями и непроверяемыми? 12

В чём разница с точки зрения синтаксиса и идеологическая при использовании? 13

Какое назначение класса Throwable? 13

Методы класса Throwable 13

Что происходит если не обработать исключение? 14

Что такое подавленные исключения? 14

Как достать подавленное исключение? 14

Что такое ресурс в конструкции try-with-resources? 14

Что если исключение вылетело сначала в try, а потом в close в конструкции try-with-recources? 15

Какое исключение вылетит? 15

Что будет с другим? 15

Когда происходит закрытие ресурса в конструкции try-with-resources если в try возникло исключение: до перехода в catch или после того, как catch отработает? 15

Какие есть уровни логирования и для чего они нужны? 15

Обязательно ли передавать в метод getLogger() имя класса? 15

Почему так принято? 16

Сообщения каких уровней мы увидим, задав уровень INFO? 16

Как Java понимает какой уровень главнее при установке .setLevel(). 16


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

  • Исключение — это проблема (ошибка), возникающая во время выполнения программы. Исключения могут возникать во многих случаях, например:

    • Пользователь ввел некорректные данные.

    • Файл, к которому обращается программа, не найден.

    • Сетевое соединение с сервером было утеряно во время передачи данных. И т.д.

  • Все исключения в Java являются объектами. Поэтому они могут порождаться не только автоматически при возникновении исключительной ситуации, но и создаваться самим разработчиком.
Что такое Error? В каком случае используется Error. Приведите пример Error’а.

Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует пытаться обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM. Например, исключения такого рода возникают, если закончилась память, доступная виртуальной машине.

Как пример — OutOfMemoryError.
Можно/нужно ли обрабатывать ошибки jvm?

  • Обрабатывать можно, но делать этого не стоит. Разработчику не предоставлены инструменты для обработки ошибок системы и виртуальной машины.
О чем говорит ключевое слово throws?

  • throws — ключевое слово, которое прописывается в сигнатуре метода, и обозначающее что метод потенциально может выбросить исключение с указанным типом.
 В чем особенность RuntimeException?

  • public class RuntimeException extends Exception — базовый класс для ошибок во время выполнения. Относится к необрабатываемым исключениям (uncatched\unchecked). Как сказано в описании класса — это суперкласс, исключения которого могут быть выброшены во время нормальной работы JVM.
Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?

  • Может и оно будет передано в виртуальную машину Java (JVM).


Чем отличаются исключения от обычных классов?

Не совсем понятен вопрос.

  • Все исключения наследуются от класса Throwable.


Все ключевые слова и всё что с ними связано.

  • try — данное ключевое слово используется для отметки начала блока кода, который потенциально может привести к ошибке.

  • catch — ключевое слово для отметки начала блока кода, предназначенного для перехвата и обработки исключений.

  • finally — ключевое слово для отметки начала блока кода, которой является дополнительным. Этот блок помещается после последнего блока ‘catch’. Управление обычно передаётся в блок ‘finally’ в любом случае.

  • throw — служит для генерации исключений.

  • throws — ключевое слово, которое прописывается в сигнатуре метода, и обозначающее что метод потенциально может выбросить исключение с указанным типом.
Всё исключения и как генерировать различные виды исключений.

  • Чтобы сгенерировать исключение используется ключевое слово throw. Как и любой объект в Java, исключения создаются с помощью new.

  • Есть два стандартных конструктора для всех исключений: первый - конструктор по умолчанию. Второй принимает строковый аргумент, в него можно поместить подходящую информацию в исключение.

  • Так же практически у каждого класса исключения есть конструктор, принимающий в качестве параметра Throwable – причину исключительной ситуации. Когда одно исключение становится причиной другого, этот конструктор можно использовать для передачи цепочки исключений (exception chaining). Если же такого конструктора нет, то у Throwable есть метод initCause(Throwable), который можно вызвать один раз, и передать ему исключение-причину.
Как создать, выбросить, поймать свое исключение?

  • Необходимо создать класс и унаследоваться от базового класса требуемого типа исключений (например, от Exception или RuntimeException). Руководствоваться нужно определением типа исключения. В зависимости от того, что необходимо обрабатывать.

  • В конструкторе класса своего исключения можно передать в конструктор базового класса исключения (например Exception) сообщение об ошибке используя ключевое слово super(message).

  • Что бы в дальнейшем использовать свое исключение, нужно воспользоваться ключевым словом throws с названием исключения в строке объявления метода после скобок с параметрами. И сгенерировать исключение с помощью оператора throw: throw new имя исключения, внутри метода.

  • Поймать исключение можно через try catch, указывав в блоке catch имя исключения.
Где возможно вызывать исключения?

  • В любом месте кода с помощью throw new Exception();.
Можно ли обрабатывать разные исключения в одном блоке catch?

  • В Java 7 стала доступна новая конструкция, с помощью которой можно перехватывать несколько исключений одним блоком catch указав через знак « необходимые исключения: catch( IOException | SQLException ex )
Обязателен ли блок finally? Конструкция try-finally

  • Оператор finally не обязателен, однако каждый оператор try требует наличия либо catch, либо finally.
А catch?

  • Catch обязателен ели нет finally. Такая запись допустима, если имеется связка try finally. Но же лучше иметь блок catch в котором будет обрабатываться необходимое исключение.
Когда будет выполнен finally?

  • Код в блоке finally будет выполнен всегда. За исключение нескольких случаев.
Когда не будет выполнен (4 случая)?

  • Если вы вызываете System.exit();

  • Если сначала произойдет сбой JVM;

  • Если JVM достигает бесконечного цикла (или другого не прерывающегося, не заканчивающегося оператора) в блоке try или catch;

  • Если ОС принудительно завершает процесс JVM специально или из-за ошибки, например: сбой питания, аппаратная ошибка итп.
Разница try catch и if

  • Исключения позволяют сделать код чище и понятнее, поскольку с их помощью можно разделить выполнение действий и обработку ошибок.

  • Исключения трудно игнорировать, в отличие от кодов ошибок.

  • Исключения легко передаются из глубоко вложенных функций.

  • Исключения могут быть, и часто являются, определяемыми пользователем типами, несущими гораздо больше информации, чем код ошибки.


Какой return вернется из try или finaly?

  • Если коротко, то вызов return — частный случай преждевременного завершения, при этом преждевременное завершение из finally перекрывает и отбрасывает любое преждевременное завершение в блоке try. Из finally.
Что если в конструкции try finally вылетело исключение сначала в try а потом в finally?

  • Ответ аналогичный случаю с двумя return — будет обработано в finally блоке.
Какое исключение вылетит?

  • Если было выброшено два исключения — одно в try, второе в finally, то исключение в finally «проглотит» исключение выше.
Что будет с другим?

  • Если до блока finally исключение было обработано, то мы можем получить информацию об исключении в блоке try и тем самым не потерять исключение, которое впоследствии может быть перезаписано в finally другим исключением.


Расскажи про информацию, которая находится внутри исключения?

  • Причина ошибки(cause)

  • Возможно, присутствует сообщение об ошибке.

  • StackTrace - список методов, которые были вызваны до момента, когда в приложении произошло исключение.

  • Список подавленных исключений
Как с ней работать? Что возвращает getStackTrace()?

  • Используя метод getStackTrace() можно получить массив элементов StackTraceElement, каждый из которых содержит информацию об одном методе. Все элементы вместе и образуют stack trace.


Какую информацию можно получить из StackTraceElement?

  • StackTraceElement хранит информацию по одному элементу stack trace — т.е. по одному методу из StackTrace. Используется как массив элементов StackTrace.


Что такое Стек?

  • Стек — это структура хранения данных, в которую можно добавлять элементы и из которой можно забирать элементы. Причем брать элементы можно только с конца: сначала последний добавленный, потом — предпоследний, и т.д.


Какое правило должно соблюдаться при использовании нескольких блоков catch (с одним try)?

  • Исполняется только тот, который первым соответствует типу исключения.

  • Используется правило перехвата: сначала более конкретные исключения за ними следуют менее конкретные (более общие).
Какое правило должно соблюдаться при попытке поймать несколько исключений в одном catch?

  • В одном блоке нельзя ловить исключения предка и потомка(наследников класса). В этом случае, в список исключений нужно добавить исключения предка, так как он также будет ловить исключения типа потомка.


Зачем создавать свой класс и наследовать его от Exception?

  • Можно создать свой класс исключений если вам нужно более точно обрабатывать исключения.

  • Свой класс исключений нужно создавать только тогда, когда уже имеющиеся классы исключений не подходят по вашу ситуацию. Иными словами: если существующие имена исключений не покрывают ваши потребности.

  • Наследуясь от Exception, можно обрабатывать исключения и переопределить методы, которые использует этот класс. (Класс Exception пустой, он использует методы Throwable).
Что такое ошибка, а что такое исключительная ситуация?

  • «Ошибка» является критическим условием, которое не может быть обработано кодом программы.

  • «Исключение» — это исключительная ситуация, которая может быть обработана кодом программы.

  • Например, существенная разница между ошибкой и исключением заключается в том, что ошибка вызвана нехваткой системных ресурсов, а исключение вызвано вашим кодом.


Что нужно делать программисту, если в коде происходит деление на ноль?

  • При делении на ноль целочисленное деление всегда вызывает исключение, но это не относится к числам с плавающей запятой. Для них результатом будет являться бесконечность или не число.

  • Сделать проверку через условный оператор на то, что делитель является нулем и выводить пользователю сообщения об этом.

  • Отлавливать исключение ArithmeticException через try catch.

  • Создать собственный класс исключений.
От каких классов Throwable и его подклассов нельзя наследоваться?

  • Не следует делать свои классы-исключения наследниками класса Error или какого-то его подкласса. Из-за больших сложностей обработки этих исключений.
Можно ли так написать try { throw new Object(); }?

  • Можно, но только если явно привести Object к Throwable и добавить блок catch (Throwable e). И это не имеет смысла.
В чём разница между проверяемыми исключениями и непроверяемыми?



  • Все исключительные ситуации делятся на «проверяемые» (checked) и «непроверяемые» (unchecked) компилятором. Это свойство присуще родительскому классу Throwable и всем его наследникам, Error, Exception, RuntimeException и далее передается по наследству. Никак не видимо в исходном коде класса исключения.

    • Throwable и Exception и все их наследники (за исключением наследников Error-а и RuntimeException-а) — checked

    • Error и RuntimeException и все их наследники — unchecked



  • Checked исключения отличаются от Unchecked исключения в Java, тем что:

    • Наличие\обработка Checked исключения проверяются на этапе компиляции. Наличие\обработка Unchecked исключения происходит на этапе выполнения.


В чём разница с точки зрения синтаксиса и идеологическая при использовании?

  • Checked исключения, это те, которые должны обрабатываться блоком catch или описываться в сигнатуре метода. Unchecked могут не обрабатываться и не быть описанными.


Какое назначение класса Throwable?

  • Класс Throwable является базовым для всех стандартных классов исключений Java. Этот класс предоставляет ряд методов, которые можно использовать или переопределять в собственных классах обработки исключений. Эти классы должны быть унаследованы от класса Exception, который унаследован от класса Throwable. Класс Exception не содержит методов.


Методы класса Throwable

  1. Метод final void addSuppressed(Throwable исключение) - добавляет заданное исключение в список подавляемых исключений. Этот список связывается с вызывающим (данным) исключением. Метод используется для применения в операторе try с ресурсами.

  2. Метод Throwable fillInStackTrace() - возвращает объект класса Throwable, содержащий полную трассировку стека. Этот объект может быть сгенерирован повторно.

  3. Метод Throwable getCause() - возвращает исключение, лежащее в основе текущего исключения. Метод возвращает null в случае, если такое исключение отсутствует. Этот метод используется при создании цепочек исключений – он вызывает исключение, вызывающее текущее исключение.

  4. Метод String getLocalizedMessage() - возвращает локализованное описание исключения.

  5. Метод String getMessage() - возвращает описание исключения.

  6. Метод StackTraceElement[] getStackTrace() - возвращает массив, содержащий поэлементную трассировку стека в виде объектов класса StackTraceElement.

  7. Метод final Throwable[] getSuppressed() - получает подавленные исключения, связанные с вызывающим исключением, и возвращает массив, который содержит результат. Подавленные исключения генерируются в операторе try с ресурсами.

  8. Метод Throwable initCause(Throwable причина_исключения) - связывает входной параметр причина_исключения с вызывающим исключением, указывая его как причину этого вызывающего исключения. Возвращает ссылку на исключение. Метод используется при создании цепочек исключений.

  9. Метод printStackTrace() - выводит трассировку стека.

  10. Метод printStackTrace() - Метод направляет трассировку стека в заданный поток_вывода. имеет еще две перегруженных реализации:

  11. void printStackTrace(PrintStream поток_вывода)

  12. void printStackTrace(PrintWriter поток_вывода)

  13. Метод void setStackTrace(StackTraceElement элементы[]) - устанавливает трассировку стека для заданных элементов.

  14. Метод String toString() - возвращает объект типа String содержащий описание исключения. Этот метод можно вызвать из метода println() при выводе объекта типа Throwable.
Что происходит если не обработать исключение?

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

  • Непроверяемые компилятором исключения должен контролировать сам программист. В случае необработанной ошибки программа завершит свое выполнение.


Что такое подавленные исключения?

  • Подавленное исключение — это исключение, которое выбрасывается, но каким-то образом игнорируется. Распространенный сценарий для этого в Java — это когда блок finally создает исключение, а любое исключение, первоначально возникшее в блоке try , подавляется.
Как достать подавленное исключение?

  • Получить доступ к подавленному исключению возможно, например, если использовать метод addSuppressed() в блоке finally и передать в качестве параметра исходное исключение из блока catch через промежуточную переменную, что бы исключение не потерялось.


Что такое ресурс в конструкции try-with-resources?

  • Ресурсы объявляются в скобках сразу после try, а компилятор уже сам неявно создаёт секцию finally.

  • Ресурсом называется объект, являющийся экземпляром класса, который реализует интерфейс java.lang.AutoCloseable или java.io.Closable

  • Можно указывать несколько ресурсов разделяя их точкой с запятой.

  • Закрываться эти ресурсы будут в порядке, обратном их объявлению.

  • В Java 9 стало возможным использовать в try-блоке ресурсы, объявленные вне try-блока.

  • Ресурс становится final и его нельзя изменить.

  • При выходе из блока try-with-resources будет вызван метод close() и освобождены все ресурсы.
Что если исключение вылетело сначала в try, а потом в close в конструкции try-with-recources?

  • Брошенное try-блоком исключение имеет больший приоритет, чем исключения, получившиеся во время закрытия. В конструкции try-finally наоборот, исключение из finally перекроет исключение в try.


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

  • Исключение в try перекроет исключение в close
Что будет с другим?

  • Исключение будет подавленно, и его можно получить через метод getSuppress.
Когда происходит закрытие ресурса в конструкции try-with-resources если в try возникло исключение: до перехода в catch или после того, как catch отработает?

  • catch и явный finally выполняются уже после того, как закрываются ресурсы в неявном finally(ментор сказал в неявном try catch), который компилятор сам неявно создаёт.


Какие есть уровни логирования и для чего они нужны?

Для контроля объема информации и уменьшения нагрузки из-за процесса логирования создали уровни логирования. Логгер можно конфигурировать для того, чтобы игнорировать логи с уровнем ниже заданного, например логгер WARNING будет записывать SEVERE и WARNING, но будет пропускать все что ниже него INFO и ниже.

    • SEVERE (серьезные ошибки программы)

    • WARNING (предупреждение)

    • INFO (информационное сообщение)

    • CONFIG (конфигурационные параметры)

(детальное логирование)

    • FINE (сообщение об успешной операции)

    • FINER

    • FINEST



    • OFF(отключить)

    • ALL(записывать все)


Обязательно ли передавать в метод getLogger() имя класса?

  • Нет не обязательно, можно передать любой строковый параметр. Но желательно.
Почему так принято?

  • Легко проверить класс ведения журнала, так как имя журнала будет отображаться в файле журнала. Можно быстро перейти к определенному классу.

  • Не нужно беспокоиться о дублировании имен журналов в сложном приложении. Имя всегда будет уникальным.
Сообщения каких уровней мы увидим, задав уровень INFO?

  • SEVERE (серьезные ошибки программы)

  • WARNING (предупреждение)

  • INFO (информационное сообщение)
Как Java понимает какой уровень главнее при установке .setLevel().

  • В классе Level первым параметром идет строковое название уровня логирования, а вторым параметром int значение приоритета. У уровня info приоритет 800 у warning 900, чем больше значение, тем выше приоритет.


написать администратору сайта