Существуют ли в Java какие-либо исключения, которые по умолчанию выдаются вызывающей стороне, даже если вы не указываете их с помощью throws [duplicate]

Не думаю, что смогу лучше уточнить вопрос ...


person suspicious    schedule 30.12.2015    source источник
comment
Возможно, вы найдете здесь ответ: stackoverflow.com/questions/2190161/   -  person Keppil    schedule 30.12.2015


Ответы (2)


Есть много таких исключений, называемых «исключениями времени выполнения». RuntimeException для примера.

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

да. Все, что унаследовано от RuntimeException или Error.

Первый означает некоторые необработанные проблемы в вашем коде, ошибка означает серьезную проблему с JVM, такую ​​как нехватка памяти, переполнение стека и т. Д.

person Zbynek Vyskovsky - kvr000    schedule 30.12.2015
comment
Errors не Exceptions. - person Luiggi Mendoza; 30.12.2015
comment
Что ж, вы правы, ребята. Но я думаю, что стоит упомянуть, что есть и другие классы помимо Exception, которые могут вас удивить, и ваш код должен знать о - person Zbynek Vyskovsky - kvr000; 30.12.2015