2015-11-13 111 views
0

任何人都可以给我关于它的信息。我真的不明白这个例外的类型。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

它扩展了Exception,而不是RuntimeException。 – WalterM

+0

谢谢!这是什么意思,抛出子句作为\t以及catch块? – Abc

+0

必须由调用者处理异常。要么重新抛出异常,要么抓住它。运行时异常不需要直接处理 –

回答

0
  1. 这是一个“运行时异常”的(愚蠢),某种意义上说,它是在运行时发生异常。但是对于所有 Java异常来说都是如此......除了编译器中的错误之外,等等。

  2. 它不是RuntimeException的子类。您已将其声明为Exception的子类,并且Exception不是RuntimeException的子类。 (事实上​​,情况正好相反:RuntimeExceptionException一个子类!)

  3. 这是一个检查异常,因为它不是RuntimeException(或Error)的子类。

由于它是一个检查异常,所以有关检查异常的Java规则适用。例如,任何抛出或传播您的异常的方法都必须声明它为throws这个异常,或者是这个异常的超类的异常。


1 - 技术上,JLS描述此作为方法本体的异常终止与此异常为异常终止原因

0

Exception和RuntimeException之间的主要区别是我们需要在try/catch块中包装一个Exception。 RuntimeException不需要被捕获,但它与Exception一样致命。

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(); 
    } 

} 

以上面的示例为例。输出是这样的:

捕获的异常java.lang.Exception的
抓到的RuntimeException了java.lang.RuntimeException
未捕获的异常了java.lang.RuntimeException

正如你所知道的,通话throwRuntimeException()被抛出,并且由于没有try/catch块,所以它不知道如何处理它。这使线程崩溃,并且因为有一个UncaughtExceptionHandler被调用。

然后还有一个错误,我不会去,因为除了JVM抛出它之外,我对它不了解太多。 OutOfMemoryError就是一个例子。

相关问题