Почему Integer.parseInt компилируется без try catch?

Насколько я понимаю, в java функция, которая выдает исключение, не должна компилироваться без попытки и отлова или замедления в функции над ней. Почему тогда этот код является законным и не раздавить?

public static void main(String[] args) {
    Integer.parseInt("33");
}

даже несмотря на то, что Integer.parseInt() Выдает: NumberFormatException - если строка не содержит анализируемого целого числа.


person user1123219    schedule 10.01.2013    source источник
comment
Integer.parseInt(null); также компилируется.   -  person Peter Lawrey    schedule 10.01.2013
comment
Но мой сонарлинт подсказывает мне окружить parseInt попыткой поймать.   -  person raviraja    schedule 20.12.2018


Ответы (8)


NumberFormatException расширяет RuntimeException, которое является непроверяемым исключением, которое не нужно перехватывать.

введите здесь описание изображения

Отрывок из руководства по Java

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

Документация по API NumberFormatException

person Kevin Bowersox    schedule 10.01.2013


NumberFormatException — это так называемый непроверенный исключение, потому что это подтип RuntimeException.

В java непроверенные исключения также компилируются без try-catch

person gefei    schedule 10.01.2013

NumberFormatException является RuntimeException неотмеченным поэтому не нужно ловить.

Пожалуйста, проверьте [документацию], если вы не знаете, что такое проверенный/непроверенный Exception2

person Adam Arold    schedule 10.01.2013

Насколько я понимаю, в java функция, выбрасывающая исключение, не должна компилироваться без попытки и отлова

Правильно, просто измените exception на Checked exception.

Пройдите следующее, чтобы иметь четкое представление об этом:

Эффективные исключения Java

Исключения

person Azodious    schedule 10.01.2013

NumberFormatException является RuntimeException. RuntimeExceptions — это непроверенные исключения. То, что вы говорите, является обязательным для проверенного исключения, но не требуется для непроверенного исключения.

Пара ссылок:
http://www.javapractices.com/topic/TopicAction.do?Id=129
http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html

person ThanksForAllTheFish    schedule 10.01.2013

Исключения в Java бывают двух видов: проверенные исключения и непроверенные исключения.

Проверенные исключения - это те, которые нуждаются в try-catch блоке или объявлении.

Непроверенное исключение в этом не нуждается. NumberFormatException — непроверенное исключение.

По сути, unchecked Exception происходит от RuntimeException и поэтому не нуждается в объявлении или блоке try-catch.

person Jerome    schedule 10.01.2013

Это непроверенное исключение. Класс RuntimeException и его подклассы являются классами непроверенных исключений. Эти исключения могут возникать в любом месте вашего кода. Таким образом, вы должны поймать это исключение и продолжить выполнение.

person Renjith    schedule 10.01.2013