Главная страница
Навигация по странице:

  • Exception и Error .Исключения типа Error

  • Непроверяемые исключения

  • StackTraceElement

  • Получить доступ к подавленному исключению

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

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

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

  • Что такое ресурс в конструкции try-with-resources - Ресурсом называется

  • Можно указывать несколько

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

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

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

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


    Скачать 60.08 Kb.
    НазваниеИсключение это ошибка, возникающая во время выполнения программы. Используя подсистему обработки исключений Java, можно контролировать реакцию программы
    АнкорРевью 4 Ката
    Дата11.01.2023
    Размер60.08 Kb.
    Формат файлаdocx
    Имя файлаРевью 4.docx
    ТипДокументы
    #881238

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


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


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



    Висключения представлены отдельными классами. Все классы исключений являются потомками класса Throwable. Так, если в программе возникнет исключительная ситуация, будет сгенерирован объект класса, соответствующего определенному типу исключения. У класса Throwable есть два подкласса: Exception и Error.

    Исключения типа Error относятся к ошибкам, возникающим в виртуальной машине Java, а не в программе. Контролировать такие исключения невозможно, поэтому реакция на них в прикладной программе, как правило, не предусматривается.
    Ошибки, связанные с выполнением действий в программе, представлены отдельными подклассами, производными от класса Exception (пр. деления на ноль, выхода за границы массива и обращения к файлам). Подобные ошибки следует обрабатывать в самой программе. Важным подклассом, производным от Exception, является класс RuntimeException, который служит для представления различных видов ошибок, часто встречающихся при выполнении программ.



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


    Проверяемые исключения – это исключения, на которые разработчик обязан отреагировать, т.е написать обработчики, и наличие этих обработчиков будет проверено на этапе компиляции. Код не будет скомпилирован, если какое-то проверяемое исключение не обработано, компилятор этого не допустит. (Throwable, Exception)

    Непроверяемые исключения – это исключения времени выполнения. Компилятор не будет от вас требовать обработки непроверяемых исключений. (RuntimeException, Error)
    Checked исключения отличаются от Unchecked исключения в Java, тем что:

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

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

    Unchecked могут не обрабатываться и не быть описанными.


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


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



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


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


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


    Throw (экщемпляр Exception)

    Можно (создать экземпляр в классе Exception и бросить его)


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


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

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

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

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

    А в StackTrace мы видим, где конкретно произошла ошибка.



    1. Что возвращает getStackTrace()?


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


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


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

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


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


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

    Используется как массив элементов StackTrace.


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


    try – определяет блок кода, в котором может произойти исключение;

    catch – определяет блок кода, в котором происходит обработка исключения;

    finally – определяет блок кода, который является необязательным, но при его наличии выполняется в любом случае независимо от результатов выполнения блока try.
    Можно ли обрабатывать разные исключения в одном блоке 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


    1. В if нельзя поймать и обработать ошибки, просто проверить условие;

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



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


    try (Класс имя = new Класс())

    {

    Код, который работает с переменной имя

    }
    Try-with-resources – это еще одна разновидность оператора try. После ключевого слова try нужно добавить круглые скобки, а внутри них — создать объекты с внешними ресурсами. Для объекта, указанного в круглых скобках, компилятор сам добавит секцию finally и вызов метода close().
    Что такое ресурс в конструкции try-with-resources?
    - Ресурсом называется объект, являющийся экземпляром класса, который реализует интерфейс java.lang.AutoCloseable или java.io.Closable

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

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

    - Возможно использование в 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), который компилятор сам неявно создаёт.


    1. Расскажи, как правильно ловить исключения? Иерархия catch блоков


    В Java исключения ловят и обрабатывают с помощью конструкции try/catch/finally.
    При заключении кода в один или несколько блоков try указывается потенциальная возможность выбрасывания исключения в этом месте, все операторы, которые могут сгенерировать исключение, помещаются в этом блоке.
    В блоках catch перечисляются исключения, на которые решено реагировать. Тут определяются блоки кода, предназначенные для решения возникших проблем. Это и есть объявление тех самых получателей/обработчиков исключений.
    Иерархия
    Порядок объявления в блоке catch должен быть от низкого наследника к более высокому, если исключения наследуются друг от друга.


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


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

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

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

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


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


    В любом месте кода с помощью throw new Exception();.


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


    Уровни журналов используются для классификации их по степени серьезности или влиянию на стабильность приложения.
    - SEVERE (серьезные ошибки программы)

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

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

    - CONFIG (конфигурационные параметры) (детальное логирование)

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

    - FINER

    - FINEST

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

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


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


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

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

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

    - Не нужно беспокоиться о дублировании имен журналов в сложном приложении. Имя всегда будет уникальным.


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


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

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

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


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

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


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