Обработка исключений: throw, throws и Throwable
может ли кто-нибудь из вас объяснить, в чем разница между throw
, throws
и Throwable
и когда какую использовать?
10 ответов
-
throws
: используется при написании методов, чтобы объявить, что рассматриваемый метод выдает указанное (проверенное) исключение.в отличие от проверенных исключений, исключения времени выполнения (NullPointerExceptions и т. д.) могут быть брошены без объявления метода
throws NullPointerException
. -
throw
: инструкция фактически выбросить исключение. (Или, более конкретно,Throwable).ключевое слово throw сопровождается ссылка на
Throwable
(обычно исключение).
пример:
-
Throwable
: класс, который вы должны расширить, чтобы создать свой собственный, пользовательский, throwable.
пример:
-
throw
: оператор для броска объектаt
здесьt instanceof java.lang.Throwable
должно быть true. -
throws
: маркер подписи метода для указания проверенных исключенийthrow
n этим методом. -
java.lang.Throwable
: родительский тип для всех объектов, которые могут быть брошены (и поймали).
это очень легко понять.
на java.ленг.Throwable:
на
Throwable
класс суперкласс всех ошибок и исключения в языке Java. Только объекты, являющиеся экземплярами этого класс (или один из его подклассов) брошенный виртуальной машиной Java или может быть брошен на Javathrow
заявление. Аналогично, только этот класс или один из его подклассы могут быть аргументом тип вcatch
предложения. больше
ключевое слово закидываем используется в объявлении метода, это указывает, какое исключение[Throwable class] мы можем ожидать от этого метода.
ключевое слово бросить используется для создания объекта, являющегося экземпляром класса Throwable.
дабы увидеть некоторый пример:
мы создаем себе класса exception
public class MyException super Exception {
}
мы создаем метод, который создает объект из нашего класса исключений и закидываем это с помощью ключевого слова бросить.
private void throwMeAException() throws MyException //We inform that this method throws an exception of MyException class
{
Exception e = new MyException (); //We create an exception
if(true) {
throw e; //We throw an exception
}
}
когда мы будем использовать метод throwMeAException()
, мы вынуждены заботиться о нем определенным образом, потому что у нас есть информация, что он что-то кидает, в этом случае у нас есть три варианта.
первый вариант - использовать блок try and catch для обработки исключения:
private void catchException() {
try {
throwMeAException();
}
catch(MyException e) {
// Here we can serve only those exception that are instance of MyException
}
}
второй вариант-передать исключение
private void passException() throws MyException {
throwMeAException(); // we call the method but as we throws same exception we don't need try catch block.
}
третий вариант-поймать и повторно сгенерировать исключение
private void catchException() throws Exception {
try {
throwMeAException();
}
catch(Exception e) {
throw e;
}
}
возобновление, когда вам нужно остановить какое-то действие, вы можете бросить исключение, которое вернется до тех пор, пока не будет сервером с помощью блока try-catch. Везде, где вы используете метод, который создает исключение, вы должны обрабатывать его блоком try-catch или добавлять объявления в свои методы.
исключением из этого правила являются java.lang.RuntimeException
их не нужно объявлять. Это другое. история как аспект использования исключений.
throw - используется для создания исключения.Оператор throw требует одного аргумента: объект класса throwable
throws - используется для указания того, что метод может вызывать исключение
Throwable - это суперкласс всех ошибок и исключений на языке Java. можно выбрасывать только объекты, производные от класса Throwable. throwable содержит снимок стека выполнения своего потока в момент его создания
Throw
используется для исключения броска,throws
(если я правильно угадал) используется, чтобы указать, что метод может бросить особое исключение, и Throwable
class является суперклассом всех ошибок и исключений в Java
бросок :
используется для фактического создания исключения, тогда как throws является декларативным для метода. Они не взаимозаменяемы.
throw new MyException("Exception!);
Броски:
Это должно использоваться, когда вы не используете оператор try catch в своем коде, но вы знаете, что этот конкретный класс способен создавать исключения so и so(только проверенные исключения). В этом вы не используете блок try catch, но пишете, используя предложение throw в соответствующая точка в коде и исключение выдается вызывающему методу и обрабатывается им. Также ключевое слово throws используется, когда функция может выдать проверенное исключение.
public void myMethod(int param) throws MyException
Throwable :
в Java, все ошибки и классов исключением являются drieved от Java.ленг.Класс Throwable. Это вершина иерархии классов ошибок и исключений. Только объекты, которые являются экземплярами этого класса (или одного из его подклассов), брошены виртуальной машиной Java или могут быть брошены инструкцией Java throw.
Throws:
является модификатором post-method и указывает, какие execptions могут быть вызваны методом. Если они являются проверенными исключениями, компилятор будет гарантируйте, что код, вызывающий этот метод, должен поймать эти проверенные исключения.
Throw:
оператор используется для создания ошибки или исключений. оператор throw требует одного аргумента: экземпляра любого подкласса класса Throwable или класса Throwable. Выполнение инструкции throw запускает JVM для создания этого исключения и вызывает исключение.
листинг несколько...
бросить
- Java
throw
ключевое слово используется, чтобы явноthrow
исключение. - проверенное исключение, не может быть распространена с помощью
throw
только. -
Throw
следует экземпляр. -
Throw
используется в рамках метода. - вы не можете
throw
несколько исключений.
закидываем
- Java
throws
ключевое слово используется для объявления исключение. - проверенное исключение может распространяться с помощью
throws
. -
Throws
следует класс. -
Throws
используется с сигнатурой метода. - вы можете объявить несколько исключений например
public void method()throws IOException,SQLException
существует 2 основных типа исключений:
исключения времени выполнения (непроверено): например. Исключение NullPointerException, Исключение ClassCastException,..
Проверенные Исключения: например. FileNotFoundException, CloneNotSupportedException,..
исключения среды выполнения-это исключения, возникающие во время выполнения, и разработчик не должен пытаться поймать или остановить его. Вы только пишете код, чтобы избежать их или выдать команду бросить, когда критерии ошибки встречались. Мы используем бросьте внутрь тела метода.
public Rational(int num, int denom){
if(denom <= 0) {
throw new IllegalArgumentException("Denominator must be positive");
}
this.num=num;
this.denom=denom;
}
однако для проверенных исключений JVM ожидает, что вы обработаете его и дадите ошибку компилятора, если не обработано, поэтому вы объявляете, что он выдает этот тип исключения, как показано ниже в методе clone ().
Class Employee{
public Employee clone() throws CloneNotSupportedException{
Employee copy = (Employee)super.clone();
copy.hireDate = (Date)hireDate.clone();
return copy;
}
}
тот же ответ, что и выше, но с копипаст приятно:
public class GsonBuilderHelper {
// THROWS: method throws the specified (checked) exception
public static Object registerAndRun(String json) throws Exception {
// registering of the NaturalDeserializer
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Object.class, new NaturalDeserializer());
Gson gson = gsonBuilder.create();
Object natural = null;
try {
// calling the NaturalDeserializer
natural = gson.fromJson(json, Object.class);
} catch (Exception e) {
// json formatting exception mainly
Log.d("GsonBuilderHelper", "registerAndRun(json) error: " + e.toString());
throw new Exception(e); // <---- THROW: instance of class Throwable.
}
return natural;
}
}