Файл: Что такое Error В каком случае используется Error. Приведите пример Errorа. 2.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.01.2024

Просмотров: 97

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

  • Отлавливать исключение 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, чем больше значение, тем выше приоритет.