ValidationException是否是运行时异常?

时间:2015-11-13 23:54:40

标签: java

任何人都可以告诉我有关它的信息。我真的无法理解这个例外的类型。

谢谢

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

2 个答案:

答案 0 :(得分:0)

  1. 它是(运气)意义上的“运行时异常”,它是在运行时发生的异常。但是对于所有 Java异常都是如此...除了编译器中的错误等等。

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

  3. 这是已检查的例外,因为它不是RuntimeException(或Error)的子类。

  4. 由于它是一个经过检查的异常,因此适用于有关已检查异常的Java规则。例如,任何抛出或传播 1 异常的方法都必须声明它为throws此异常,或者是异常,这是该异常的超类。

    1 - 从技术上讲,JLS将此描述为方法体的异常终止,异常终止原因 < / p>

答案 1 :(得分: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();
  }

}

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

  

Caught Exception java.lang.Exception
  Caught RuntimeException java.lang.RuntimeException
  未捕获的异常java.lang.RuntimeException

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

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