Runtime exceptions java что это
RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.
RuntimeException and its subclasses are unchecked exceptions. Unchecked exceptions do not need to be declared in a method or constructor's throws clause if they can be thrown by the execution of the method or constructor and propagate outside the method or constructor boundary.
Method Summary
RuntimeException
Constructs a new runtime exception with null as its detail message. The cause is not initialized, and may subsequently be initialized by a call to Throwable.initCause(java.lang.Throwable) .
Methods declared in class java.lang.Throwable
2. Проверяемые исключения: throws , checked exceptions
Все исключения в Java делятся на 2 категории — проверяемые ( checked ) и непроверяемые ( unchecked ).
Все исключения, унаследованные от классов RuntimeException и Error , считаются unchecked-исключениями , все остальные — checked-исключениями .
В чем же основное отличие checked-исключений от unchecked ?
К checked-исключениям есть дополнительные требования. Звучат они примерно так.
Требование 1
Если метод выбрасывает checked-исключение , он должен содержать тип этого исключения в своем заголовке (сигнатуре метода). Чтобы все методы, которые вызывают данный метод, знали о том, что в нем может возникнуть такое «важное исключение».
Указывать checked-исключения надо после параметров метода после ключевого слова throws (не путать со throw ). Выглядит это примерно так:
checked-исключение | unchecked-исключение |
---|
В примере справа наш код выкидывает unchecked-исключение — никаких дополнительных действий не нужно. В примере слева метод выкидывает checked-исключение , поэтому в сигнатуру метода добавили ключевое слово throws и указали тип исключения.
Если метод планирует выкидывать несколько checked-исключений , все их нужно указать после ключевого слова throws через запятую. Порядок неважен. Пример:
Требование 2
Если вы вызываете метод, у которого в сигнатуре прописаны checked-исключения , то вы не можете проигнорировать этот факт.
Вы должны либо перехватить все эти исключения, добавив блоки catch для каждого из них, либо добавить их в throws своего метода.
Мы как бы говорим себе: э ти исключения настолько важные, что мы обязательно должны их перехватить. А если мы не знаем, как их перехватить, мы должны уведомить тех, кто будет вызывать наш метод, что в нем могут возникнуть такие исключения.
Представим, что мы пишем метод, который должен создать мир, населенный людьми. Начальное количество человек передается в качестве параметра. Тогда мы должны добавить исключения, если людей слишком мало.
Вызов этого метода можно обработать 3 способами:
1. Не перехватываем возникающие исключения
Чаще всего это делается в случае, когда в методе не известно, как правильно обработать эту ситуацию.
Код | Примечание |
---|---|
Вызывающий метод не перехватывает исключения и вынужден информировать о них других: добавить их себе в throws |
2. Перехватывать часть исключений
Обрабатываем понятные ошибки, непонятные — прокидываем в вызывающий метод. Для этого нужно добавить их название в throws:
Код | Примечание |
---|---|
Вызывающий метод перехватывает только одно checked-исключение – ОдинокийМир , второе он должен добавить в свою сигнатуру: указать после слова throws |
3. Перехватываем все исключения
Код | Примечание |
---|---|
В этом методе перехватываются все ошибки. Вызывающий метод будет уверен, что все прошло отлично. |
Methods declared in class java.lang.Object
RuntimeException
Constructs a new runtime exception with the specified detail message. The cause is not initialized, and may subsequently be initialized by a call to Throwable.initCause(java.lang.Throwable) .
3. Множественный перехват исключений
Программисты очень не любят дублирование кода. Даже придумали такой принцип разработки — DRY : Don’t Repeat Yourself. Однако при обработке исключений часто возникают ситуации, когда после блока try следует несколько блоков catch с одинаковым кодом.
Или может быть, например, 3 catch -блока с одним кодом и еще 2 catch -блока с другим. Стандартная в общем-то ситуация, когда у вас в проекте ответственно относятся к обработке исключений.
Начиная с 7-й версии, в язык Java добавили возможность указать несколько типов исключений в одном блоке catch . Выглядит это примерно так:
Блоков catch может быть сколько угодно. Однако в одном блоке catch нельзя указать исключения, которые наследуются друг от друга. Т.е. нельзя написать catch ( Exception | RuntimeException e), т.к. класс RuntimeException унаследован от Exception .
Все исключения делятся на 4 вида, которые на самом деле являются классами, унаследованными друг от друга.
Самым базовым классом для всех исключений является класс Throwable . В классе Throwable содержится код, который записывает текущий стек-трейс вызовов функций в массив. Что такое стек-трейс вызовов, мы изучим немного позднее.
В оператор throw можно передать только объект класса-наследника Throwable . И хотя теоретическим можно написать код вида throw new Throwable(); — так обычно никто не делает. Главная цель существования класса Throwable — единый класс-предок для всех исключений.
Следующим классом исключений является класс Error — прямой наследник класса Throwable . Объекты типа Error (и его классов-наследников) создает Java-машина в случае каких-то серьезных проблем. Например, сбой в работе, нехватка памяти, и т.д.
Обычно вы как программист ничего не можете сделать в ситуации, когда в программе возникла ошибка типа Error : слишком серьезна такая ошибка. Все, что вы можете сделать — уведомить пользователя, что программа аварийно завершается или записать всю известную информацию об ошибке в лог программы.
Исключения типа Exception (и RuntimeException ) — это обычные ошибки, которые возникают во время работы многих методов. Цель каждого выброшенного исключения — быть захваченным тем блоком catch , который знает, что нужно сделать в этой ситуации.
Когда какой-то метод не может выполнить свою работу по какой-то причине, он сразу должен уведомить об этом вызывающий метод, выбрасывая исключение соответствующего типа.
Другими словами, если какая-то переменная оказалась равна null , метод выкинет NullPointerException , если в метод передали неверные аргументы — выкинет InvalidArgumentException , если в методе случайно было деление на ноль — ArithmeticException .
RuntimeException — это разновидность (подмножество) исключений Exception . Можно даже сказать, что RuntimeException — это облегченная версия обычных исключений ( Exception ): на такие исключения налагается меньше требований и ограничений
Об отличии Exception и RuntimeException вы узнаете дальше
Methods inherited from class java.lang.Object
Constructor Details
Methods declared in class java.lang.Throwable
Constructor Summary
Constructs a new runtime exception with the specified detail message, cause, suppression enabled or disabled, and writable stack trace enabled or disabled.
Constructs a new runtime exception with the specified cause and a detail message of (cause==null ? null : cause.toString()) (which typically contains the class and detail message of cause ).
Methods inherited from class java.lang.Throwable
Method Summary
Constructor Summary
Constructs a new runtime exception with the specified detail message, cause, suppression enabled or disabled, and writable stack trace enabled or disabled.
Constructs a new runtime exception with the specified cause and a detail message of (cause==null ? null : cause.toString()) (which typically contains the class and detail message of cause).
2. Проверяемые исключения: throws , checked exceptions
Все исключения в Java делятся на 2 категории — проверяемые ( checked ) и непроверяемые ( unchecked ).
Все исключения, унаследованные от классов RuntimeException и Error , считаются unchecked-исключениями , все остальные — checked-исключениями .
В чем же основное отличие checked-исключений от unchecked ?
К checked-исключениям есть дополнительные требования. Звучат они примерно так.
Требование 1
Если метод выбрасывает checked-исключение , он должен содержать тип этого исключения в своем заголовке (сигнатуре метода). Чтобы все методы, которые вызывают данный метод, знали о том, что в нем может возникнуть такое «важное исключение».
Указывать checked-исключения надо после параметров метода после ключевого слова throws (не путать со throw ). Выглядит это примерно так:
checked-исключение | unchecked-исключение |
---|
В примере справа наш код выкидывает unchecked-исключение — никаких дополнительных действий не нужно. В примере слева метод выкидывает checked-исключение , поэтому в сигнатуру метода добавили ключевое слово throws и указали тип исключения.
Если метод планирует выкидывать несколько checked-исключений , все их нужно указать после ключевого слова throws через запятую. Порядок неважен. Пример:
Требование 2
Если вы вызываете метод, у которого в сигнатуре прописаны checked-исключения , то вы не можете проигнорировать этот факт.
Вы должны либо перехватить все эти исключения, добавив блоки catch для каждого из них, либо добавить их в throws своего метода.
Мы как бы говорим себе: э ти исключения настолько важные, что мы обязательно должны их перехватить. А если мы не знаем, как их перехватить, мы должны уведомить тех, кто будет вызывать наш метод, что в нем могут возникнуть такие исключения.
Представим, что мы пишем метод, который должен создать мир, населенный людьми. Начальное количество человек передается в качестве параметра. Тогда мы должны добавить исключения, если людей слишком мало.
Вызов этого метода можно обработать 3 способами:
1. Не перехватываем возникающие исключения
Чаще всего это делается в случае, когда в методе не известно, как правильно обработать эту ситуацию.
Код | Примечание |
---|---|
Вызывающий метод не перехватывает исключения и вынужден информировать о них других: добавить их себе в throws |
2. Перехватывать часть исключений
Обрабатываем понятные ошибки, непонятные — прокидываем в вызывающий метод. Для этого нужно добавить их название в throws:
Код | Примечание |
---|---|
Вызывающий метод перехватывает только одно checked-исключение – ОдинокийМир , второе он должен добавить в свою сигнатуру: указать после слова throws |
3. Перехватываем все исключения
Methods declared in class java.lang.Object
Constructor Detail
RuntimeException
Constructs a new runtime exception with null as its detail message. The cause is not initialized, and may subsequently be initialized by a call to Throwable.initCause(java.lang.Throwable) .
RuntimeException
Constructs a new runtime exception with the specified detail message. The cause is not initialized, and may subsequently be initialized by a call to Throwable.initCause(java.lang.Throwable) .
RuntimeException
Note that the detail message associated with cause is not automatically incorporated in this runtime exception's detail message.
RuntimeException
Constructs a new runtime exception with the specified cause and a detail message of (cause==null ? null : cause.toString()) (which typically contains the class and detail message of cause ). This constructor is useful for runtime exceptions that are little more than wrappers for other throwables.
RuntimeException
Constructs a new runtime exception with the specified detail message, cause, suppression enabled or disabled, and writable stack trace enabled or disabled.
Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2019, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.
Все исключения делятся на 4 вида, которые на самом деле являются классами, унаследованными друг от друга.
Самым базовым классом для всех исключений является класс Throwable . В классе Throwable содержится код, который записывает текущий стек-трейс вызовов функций в массив. Что такое стек-трейс вызовов, мы изучим немного позднее.
В оператор throw можно передать только объект класса-наследника Throwable . И хотя теоретическим можно написать код вида throw new Throwable(); — так обычно никто не делает. Главная цель существования класса Throwable — единый класс-предок для всех исключений.
Следующим классом исключений является класс Error — прямой наследник класса Throwable . Объекты типа Error (и его классов-наследников) создает Java-машина в случае каких-то серьезных проблем. Например, сбой в работе, нехватка памяти, и т.д.
Обычно вы как программист ничего не можете сделать в ситуации, когда в программе возникла ошибка типа Error : слишком серьезна такая ошибка. Все, что вы можете сделать — уведомить пользователя, что программа аварийно завершается или записать всю известную информацию об ошибке в лог программы.
Исключения типа Exception (и RuntimeException ) — это обычные ошибки, которые возникают во время работы многих методов. Цель каждого выброшенного исключения — быть захваченным тем блоком catch , который знает, что нужно сделать в этой ситуации.
Когда какой-то метод не может выполнить свою работу по какой-то причине, он сразу должен уведомить об этом вызывающий метод, выбрасывая исключение соответствующего типа.
Другими словами, если какая-то переменная оказалась равна null , метод выкинет NullPointerException , если в метод передали неверные аргументы — выкинет InvalidArgumentException , если в методе случайно было деление на ноль — ArithmeticException .
RuntimeException — это разновидность (подмножество) исключений Exception . Можно даже сказать, что RuntimeException — это облегченная версия обычных исключений ( Exception ): на такие исключения налагается меньше требований и ограничений
Об отличии Exception и RuntimeException вы узнаете дальше
RuntimeException
protected RuntimeException ( String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)
Constructs a new runtime exception with the specified detail message, cause, suppression enabled or disabled, and writable stack trace enabled or disabled.
Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2020, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.
RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.
RuntimeException and its subclasses are unchecked exceptions. Unchecked exceptions do not need to be declared in a method or constructor's throws clause if they can be thrown by the execution of the method or constructor and propagate outside the method or constructor boundary.
Constructor Summary
Constructs a new runtime exception with the specified detail message, cause, suppression enabled or disabled, and writable stack trace enabled or disabled.
Constructs a new runtime exception with the specified cause and a detail message of (cause==null ? null : cause.toString()) (which typically contains the class and detail message of cause ).
Method Summary
RuntimeException
Note that the detail message associated with cause is not automatically incorporated in this runtime exception's detail message.
Constructor Detail
RuntimeException
Constructs a new runtime exception with null as its detail message. The cause is not initialized, and may subsequently be initialized by a call to Throwable.initCause(java.lang.Throwable) .
RuntimeException
Constructs a new runtime exception with the specified detail message. The cause is not initialized, and may subsequently be initialized by a call to Throwable.initCause(java.lang.Throwable) .
RuntimeException
Note that the detail message associated with cause is not automatically incorporated in this runtime exception's detail message.
RuntimeException
Constructs a new runtime exception with the specified cause and a detail message of (cause==null ? null : cause.toString()) (which typically contains the class and detail message of cause). This constructor is useful for runtime exceptions that are little more than wrappers for other throwables.
RuntimeException
Constructs a new runtime exception with the specified detail message, cause, suppression enabled or disabled, and writable stack trace enabled or disabled.
- Summary:
- Nested |
- Field | |
- Detail:
- Field | |
- Method
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2022, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.
RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.
RuntimeException and its subclasses are unchecked exceptions. Unchecked exceptions do not need to be declared in a method or constructor's throws clause if they can be thrown by the execution of the method or constructor and propagate outside the method or constructor boundary.
RuntimeException
Constructs a new runtime exception with the specified cause and a detail message of (cause==null ? null : cause.toString()) (which typically contains the class and detail message of cause ). This constructor is useful for runtime exceptions that are little more than wrappers for other throwables.
Читайте также: