Обработка исключений: throw, throws и Throwable

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

10 ответов


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

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

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

    ключевое слово throw сопровождается ссылка на Throwable (обычно исключение).

пример:

enter image description here


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

пример:

enter image description here



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

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


это очень легко понять.

на java.ленг.Throwable:

на Throwable класс суперкласс всех ошибок и исключения в языке Java. Только объекты, являющиеся экземплярами этого класс (или один из его подклассов) брошенный виртуальной машиной Java или может быть брошен на Java throw заявление. Аналогично, только этот класс или один из его подклассы могут быть аргументом тип в 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 для создания этого исключения и вызывает исключение.


листинг несколько...

бросить

  1. Java throw ключевое слово используется, чтобы явно throw исключение.
  2. проверенное исключение, не может быть распространена с помощью throw только.
  3. Throw следует экземпляр.
  4. Throw используется в рамках метода.
  5. вы не можете throw несколько исключений.

закидываем

  1. Java throws ключевое слово используется для объявления исключение.
  2. проверенное исключение может распространяться с помощью throws.
  3. Throws следует класс.
  4. Throws используется с сигнатурой метода.
  5. вы можете объявить несколько исключений например 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;
    }
}