- Вопросы об интервью с Java-исключениями (ответы)
- 2. Вопросы
- Q1. Что такое исключение?
- Q2. Какова цель ключевых слов «бросок» и «бросок»?
- Q3. Как можно справиться с исключением?
- Q4. Как поймать множественные исключения?
- Q5. В чем разница между отмеченным и непроверенным исключением?
- Q6. В чем разница между исключением и ошибкой?
- Q7. Какое исключение будет выдано при выполнении следующего блока кода?
- Q8. Что такое цепочка исключений?
- Q9. Что такое трассировка стека и как она связана с исключением?
- Q10. Почему вы хотите создать подкласс исключения?
- Q11. Каковы преимущества исключений?
- Q12. Можете ли вы создать какое-либо исключение в теле лямбда-выражения?
- Q13. Какие правила нам нужно соблюдать при переопределении метода, вызывающего исключение?
- Топ 10 вопросов об исключениях в Java
- 1. Проверяемые и непроверяемые
- 2. Лучший способ работать с исключениями
- 3. Почему переменные, определенные в try не могут быть использованы в catch или finally?
- 4. Почему Double.parseDouble(null) и Integer.parseInt(null) вызывают разные исключения?
- 5. Основные runtime exceptions в Java
- 6. Можно ли поймать несколько исключений в одном блоке catch?
- 7. Может ли конструктор вызывать исключения?
- 8. Вызов исключений в блоке final
- 9. Можно ли использовать return в блоке finally
- 10. Почему разработчики обрабатывают исключения втихую?
Вопросы об интервью с Java-исключениями (ответы)
Исключения являются важной темой, с которой каждый Java-разработчик должен быть знаком. Эта статья содержит ответы на некоторые вопросы, которые могут возникнуть во время интервью.
2. Вопросы
Q1. Что такое исключение?
Исключением является ненормальное событие, которое происходит во время выполнения программы и нарушает нормальный поток инструкций программы.
Q2. Какова цель ключевых слов «бросок» и «бросок»?
Ключевое словоthrows используется для указания того, что метод может вызывать исключение во время своего выполнения. Он обеспечивает явную обработку исключений при вызове метода:
public void simpleMethod() throws Exception < // . >
Ключевое словоthrow позволяет нам генерировать объект исключения, чтобы прервать нормальный поток программы. Это чаще всего используется, когда программа не удовлетворяет заданному условию:
Q3. Как можно справиться с исключением?
try < // . >catch (ExceptionType1 ex) < // . >catch (ExceptionType2 ex) < // . >finally < // . >
Блок кода, в котором может возникнуть исключение, заключен в блокtry. Этот блок также называется «защищенным» или «защищенным» кодом.
Если возникает исключение, выполняется блокcatch, соответствующий генерируемому исключению, в противном случае все блокиcatch игнорируются.
Блокfinally всегда выполняется после выхода из блокаtry, независимо от того, было ли в нем сгенерировано исключение или нет.
Q4. Как поймать множественные исключения?
Есть три способа обработки нескольких исключений в блоке кода.
Первый — использовать блокcatch, который может обрабатывать все генерируемые типы исключений:
Следует помнить, что рекомендуется использовать обработчики исключений, которые являются максимально точными.
Слишком широкие обработчики исключений могут сделать ваш код более подверженным ошибкам, улавливать непредвиденные исключения и вызывать неожиданное поведение в вашей программе.
Второй способ — реализовать несколько блоков catch:
try < // . >catch (FileNotFoundException ex) < // . >catch (EOFException ex) < // . >
Обратите внимание, что, если исключения имеют отношения наследования; дочерний тип должен идти первым, а родительский тип позже. Если мы этого не сделаем, это приведет к ошибке компиляции.
Третий — использовать блок multi-catch:
try < // . >catch (FileNotFoundException | EOFException ex) < // . >
Эта функция впервые появилась в Java 7; уменьшает дублирование кода и облегчает обслуживание.
Q5. В чем разница между отмеченным и непроверенным исключением?
Проверенное исключение должно обрабатываться в блокеtry-catch или объявлено в предложенииthrows; тогда как непроверенное исключение не требуется обрабатывать или объявлять.
Проверенные и непроверенные исключения также называются исключениями времени компиляции и выполнения соответственно.
Все исключения являются отмеченными исключениями, за исключением обозначенныхError,RuntimeException и их подклассов.
Q6. В чем разница между исключением и ошибкой?
Исключением является событие, которое представляет собой условие, из которого возможно восстановление, в то время как ошибка представляет внешнюю ситуацию, из которой обычно невозможно восстановить.
Все ошибки, выдаваемые JVM, являются экземплярамиError или одного из его подклассов, наиболее распространенные из них включают, но не ограничиваются:
- OutOfMemoryError — выбрасывается, когда JVM не может выделить больше объектов, потому что не хватает памяти, и сборщик мусора не может сделать больше доступных
- StackOverflowError — возникает, когда пространство стека для потока исчерпано, обычно из-за слишком глубокой рекурсии приложения.
- ExceptionInInitializerError — сигнализирует, что во время оценки статического инициализатора произошло непредвиденное исключение
- NoClassDefFoundError — выдается, когда загрузчик классов пытается загрузить определение класса и не может его найти, обычно потому, что требуемые файлыclass не были найдены в пути к классам
- UnsupportedClassVersionError — возникает, когда JVM пытается прочитать файлclass и определяет, что версия в файле не поддерживается, обычно потому, что файл был создан с помощью более новой версии Java
Хотя ошибка может быть обработана с помощью оператораtry, это не рекомендуется, поскольку нет гарантии, что программа сможет что-либо надежно сделать после того, как ошибка была выдана.
Q7. Какое исключение будет выдано при выполнении следующего блока кода?
Integer[][] ints = < < 1, 2, 3 >, < null >, < 7, 8, 9 >>; System.out.println("value paragraph">Он выдаетArrayIndexOutOfBoundsException, поскольку мы пытаемся получить доступ к позиции, превышающей длину массива.