任何人都可以告诉我有关它的信息。我真的无法理解这个例外的类型。
谢谢
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);
}
}
答案 0 :(得分:0)
它是(运气)意义上的“运行时异常”,它是在运行时发生的异常。但是对于所有 Java异常都是如此...除了编译器中的错误等等。
它不是RuntimeException
的子类。您已将其声明为Exception
的子类,而Exception
不是RuntimeException
的子类。 (事实上,情况恰恰相反:RuntimeException
是Exception
的子类!)
这是已检查的例外,因为它不是RuntimeException
(或Error
)的子类。
由于它是一个经过检查的异常,因此适用于有关已检查异常的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就是一个例子。