Обработка исключений: throw, throws и Throwable - PullRequest
54 голосов
/ 15 октября 2010

Может ли кто-нибудь из вас объяснить, в чем различия между throw, throws и Throwable и когда и какие использовать?

Ответы [ 8 ]

84 голосов
/ 15 октября 2010
  • throws: используется при написании методов, чтобы объявить, что рассматриваемый метод вызывает указанное (проверенное) исключение.

    В отличие от проверенных исключений, исключения времени выполнения (NullPointerExceptions и т. Д.) Могут создаваться без указания метода throws NullPointerException.

  • throw: Инструкция по фактическому выбрасыванию исключения. (Или, более конкретно, Throwable ).

    За ключевым словом throw следует ссылка на Throwable (обычно исключение).

* * Пример тысячи двадцать-одина: * ** 1023 тысячу двадцать две *

enter image description here


  • Throwable: класс, который вы должны расширить, чтобы создать свой собственный, настраиваемый, бросаемый.

Пример:

enter image description here


9 голосов
/ 15 октября 2010
  • throw: оператор для выброса объекта t, где t instanceof java.lang.Throwable должно быть истинным.
  • throws: токен сигнатуры метода для указания проверенных исключений throw n этим методом.
  • java.lang.Throwable: родительский тип всех объектов, которые могут быть брошены (и пойманы).

Смотрите здесь учебник по использованию исключений.

5 голосов
/ 15 октября 2010

Это действительно легко понять.

java.lang.Throwable :

Класс Throwable является суперклассом всех ошибок и исключений в языке Java.Только объекты, которые являются экземплярами этого класса (или одного из его подклассов), выбрасываются виртуальной машиной Java или могут быть выброшены оператором Java throw.Аналогично, только этот класс или один из его подклассов могут быть типом аргумента в предложении catch. Подробнее

Ключевое слово throws используется в объявлении метода, это указывает, какого рода исключение [Throwable class] мы можем ожидать от этого метода.

Ключевое слово throw используется для выброса объекта, который является экземпляром класса Throwable.


Чтобы не увидеть пример:

Мысоздаем себе класс исключений

public class MyException super Exception {

}

Мы создаем метод, который создает объект из нашего класса исключений и выбрасывает , используя ключевое слово throw .

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 и 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, которые не должны быть объявлены.Это другая история как аспект использования исключений.

2 голосов
/ 15 октября 2010

throw - используется для выброса Exception. Для оператора throw требуется один аргумент: объект класса throwable

throws - это используется, чтобы указать, что метод может выдать исключение

Throwable - это суперкласс всех ошибок и исключений в языке Java. вы можете бросать только объекты, которые являются производными от класса Throwable. throwable содержит снимок стека выполнения своего потока на момент его создания

1 голос
/ 21 мая 2013

Бросок:

используется для фактического выброса исключения, тогда как throws является декларативным для метода. Они не являются взаимозаменяемыми.

throw new MyException("Exception!);

Выдает:

Это нужно использовать, когда вы не используете оператор try catch в своем коде, но вы знаете, что этот конкретный класс способен генерировать то или иное исключение (только проверенные исключения). При этом вы не используете try catch block, а пишете, используя предложение throw в соответствующей точке вашего кода, и исключение выдается вызывающему методу и обрабатывается им. Также ключевое слово throws используется, когда функция может выдать проверенное исключение.

public void myMethod(int param) throws MyException 
1 голос
/ 15 октября 2010

Throw используется для выдачи исключения, throws (если я правильно угадал) используется для указания того, что метод может генерировать конкретное исключение, а класс Throwable является суперклассом всех ошибок и исключений в Java

Как бросать исключения

0 голосов
/ 07 февраля 2018

Существует 2 основных типа исключений:
Исключения во время выполнения (не проверено) : например. NullPointerException, ClassCastException, ..
Проверенные исключения: например. FileNotFoundException, CloneNotSupportedException, ..

Исключения во время выполнения - это исключения, возникающие во время выполнения, и разработчик не должен пытаться его перехватить или остановить. Вы только пишете код, чтобы избежать их, или вводите команду throw , когда критерии ошибки выполнены. Мы используем throw внутри тела метода.

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;
}
}
0 голосов
/ 04 марта 2015

Тот же ответ, что и выше, но с копировать-вставить удовольствие :

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;
    }
}
...