2015-11-13 2 views
0

Может кто-нибудь, пожалуйста, дайте мне информацию об этом. Я не могу угадать тип этого Исключения.Is ValidationException исключение во время выполнения или t нет?

Спасибо

public class ValidationException extends Exception{ 

public ValidationException(){ 
super("There was a problem when validating data"); 
} 

public ValidationException(String message){ 
super(message); 
} 

public ValidationException(String message, Throwable throwable){ 
super(message, throwable); 
} 

public ValidationException(Throwable throwable){ 
super(throwable); 
} 
} 
+3

Это исключает исключение, а не RuntimeException. – WalterM

+0

Спасибо! Что это означает в отношении предложений бросков как \t так же, как блоки catch? – Abc

+0

исключение должно обрабатываться вызывающим абонентом. либо путем реорганизации исключения, либо его улова.Исключения Runtime не нужно обрабатывать напрямую –

ответ

0
  1. Это «исключение во время выполнения» в (бесполезный) смысле, что это исключение, которое происходит во время выполнения. Но это верно для все Исключения Java ... кроме ошибок в компиляторе и т. Д.

  2. Это не подкласс RuntimeException. Вы объявили его подклассом Exception, а Exception не является подклассом RuntimeException. (На самом деле, верно обратное: RuntimeException является подклассом Exception!)

  3. Это проверяется исключение, потому что это не является подклассом RuntimeException (или Error).

Поскольку это проверенное исключение, применяются правила Java об отмеченных исключениях. Например, любой метод, который генерирует или распространяет , ваше исключение должно объявить, что оно throws это исключение или исключение, являющееся суперклассом этого исключения.


1 - Технически, ПСБ описывает это как аварийное завершение тела метода с этим исключением, как аварийное завершение причине.

0

Основное отличие между Exception и RuntimeException заключается в том, что нам нужно обернуть исключение в блок try/catch. Исключение RuntimeException не нужно захватывать, но оно так же смертельно, как и исключение.

public class Main{ 

    public static void main(String[] args) { 
    Thread.currentThread().setUncaughtExceptionHandler(
     new Thread.UncaughtExceptionHandler(){ 
     @Override 
     public void uncaughtException(Thread t, Throwable e){ 
      System.out.println("Uncaught Exception " + e); 
     } 
    }); 

    try{ 
     throwException(); 
    }catch(Exception e){ 
     System.out.println("Caught Exception " + e); 
    } 


    try{ 
     throwRuntimeException(); 
    }catch(Exception e){ 
     System.out.println("Caught RuntimeException " + e); 
    } 

    //unchecked, no need to wrap int try/catch 
    throwRuntimeException(); 
    } 

    public static void throwException() throws Exception { 
    throw new Exception(); 
    } 

    public static void throwRuntimeException() { 
    throw new RuntimeException(); 
    } 

} 

Возьмите этот пример выше. Выход заключается в следующем:

Caught Исключение java.lang.Exception
Пойманный RuntimeException java.lang.RuntimeException
Uncaught Exception java.lang.RuntimeException

Как вы можете сказать, вызов throwRuntimeException() получает бросок, и поскольку нет блока try/catch, он не знает, как его обрабатывать. Это приводит к сбою потока, и поскольку он вызывает вызов UncaughtExceptionHandler.

Тогда есть также Ошибка, с которой я не буду вдаваться, поскольку я не знаю много об этом, кроме того, что JVM выбрасывает ее. Пример OutOfMemoryError.

Смежные вопросы