Не думаю, что смогу лучше уточнить вопрос ...
Существуют ли в Java какие-либо исключения, которые по умолчанию выдаются вызывающей стороне, даже если вы не указываете их с помощью throws [duplicate]
comment
Возможно, вы найдете здесь ответ: stackoverflow.com/questions/2190161/
- person Keppil   schedule 30.12.2015
Ответы (2)
Есть много таких исключений, называемых «исключениями времени выполнения». RuntimeException
для примера.
person
v.ladynev
schedule
30.12.2015
Но почему по умолчанию генерируются только RuntimeExceptions?
- person suspicious; 30.12.2015
@suspicious read
RuntimeException
: RuntimeException и его подклассы не являются отмеченными исключениями. Непроверенные исключения не нужно объявлять в предложении throws метода или конструктора, если они могут быть выброшены при выполнении метода или конструктора и распространяться за пределы метода или конструктора.
- person Luiggi Mendoza; 30.12.2015
@suspicious Такое решение принял изобретатель языка Java.
- person v.ladynev; 30.12.2015
Но какое отношение имеет выбрасывание исключений по умолчанию к тому факту, что они не отмечены? Думаю, вы сбиваете с толку вопрос. И не помечайте это как дубликат Луиджи. ЭТО НЕ!
- person suspicious; 30.12.2015
@suspicious Что вы имеете в виду под выбрасыванием исключения по умолчанию?
- person v.ladynev; 30.12.2015
@ v.ladynev позвольте мне продемонстрировать на примере. У меня есть метод под названием Division (), который выполняет деление на ноль. Я вызываю этот метод из основного метода. В методе Division () я не включил блок try {} catch () {} и не включил исключение ArithmeticException при объявлении моего метода. Но когда я вызываю метод из main, он выглядит так: try {Division (); } catch (ArithmeticException e) {System.out.println (обнаружено деление на ноль); } И хотя я не использовал throws ArithmeticException при объявлении моего метода, обработка исключений в main работала.
- person suspicious; 30.12.2015
@suspicious В реальных системах вы не будете делать таких вещей
try { division(); } catch(ArithmeticException e) { System.out.println("Division by zero detected"); }
, вы просто разрешите ArithmeticException
перейти на верхний уровень :) Исключение сработало из-за типа исключения времени выполнения.
- person v.ladynev; 30.12.2015
@ v.ladynev Ради всего святого, чем вы занимаетесь в реальной жизни. Ты меня понял?
- person suspicious; 30.12.2015
@suspicious Я не уверен. В порядке. Вам не нужно объявлять
ArithmeticException
в предложении throws
, поскольку оно является потомком RuntimeException
.
- person v.ladynev; 30.12.2015
@ v.ladynev, поэтому основная функция в моем примере (с вызывающей стороной) все равно будет обрабатывать исключение, даже если метод Division () не объявляет выбросы Arithmetic Exception?
- person suspicious; 30.12.2015
@suspicious Да. Ты получил это. На мой взгляд, проверенные исключения - чушь собачья. Вы всегда должны быть готовы к возникновению исключения в любой части кода.
- person v.ladynev; 30.12.2015
@ v.ladynev вы молодец!
- person suspicious; 30.12.2015
@suspicious добро пожаловать
- person v.ladynev; 30.12.2015
да. Все, что унаследовано от RuntimeException
или Error
.
Первый означает некоторые необработанные проблемы в вашем коде, ошибка означает серьезную проблему с JVM, такую как нехватка памяти, переполнение стека и т. Д.
person
Zbynek Vyskovsky - kvr000
schedule
30.12.2015
Error
s не Exception
s.
- person Luiggi Mendoza; 30.12.2015
Что ж, вы правы, ребята. Но я думаю, что стоит упомянуть, что есть и другие классы помимо Exception, которые могут вас удивить, и ваш код должен знать о
- person Zbynek Vyskovsky - kvr000; 30.12.2015