当程序运行时出现异常的时候,我们对异常现象的捕获并试图让程序继续运行的过程,我们称之为异常处理。异常处理改变了程序的执行流程,即当程序出现异常时,即A计划执行失败,我们就执行备用B计划,使得业务继续。
Error类是Throwable的子类,代表了不可恢复的所有异常。当出现了Error异常时候,即使我们对他们进行异常处理,程序也会异常退出。Error类及其子类也被称之为异步异常。Error类不受编译器检查的-非受检异常。
Exception类是Throwable的子类,Exception类及其子类是可恢复异常。Exception是受编译器检查的-受检异常。
RuntimeException类是Exception的子类,它及它的子类不受编译器检查的-非受检异常。一般情况下,RuntimeException可以在程序中避免,比如NullPointerException, ArithmeticException, ArrayIndexOutOfBoundException等,我们在异常发生之前可以用代码判断,从而避免异常的出现。
Thread.setDefaultUncaughtExceptionHandler((thread, ex) -> { Record the exception })当我们catch了异常时,我们一般不会忽略异常即catch块是空的,最起码你得必须打印出异常堆栈信息:
try { Class<?> cl = Class.forName(className); … } catch (ClassNotFoundException ex) { ex.printStackTrace(); }
ByteArrayOutputStream out = new ByteArrayOutputStream(); ex.printStackTrace(out); String description = out.toString();
StackTraceElement[] frames = ex.getStackTrace();
package com.doctor.commons; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import com.doctor.beaver.annotation.ThreadSafe; /** * @author sdcuike * <p> * Created on 2016年9月27日<br/> */ @ThreadSafe public final class ExceptionUtils { public static String printStackTraceToString(final Throwable t) throws IOException { try (StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw);) { t.printStackTrace(pw); pw.flush(); sw.flush(); return sw.toString(); } } public static String printFullStackTraceToString(final Throwable t) throws IOException { try (StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw);) { Throwable caseT = t; while (caseT != null) { caseT.printStackTrace(pw); caseT = caseT.getCause(); } pw.flush(); sw.flush(); return sw.toString(); } } }
父类方法没有throws任何异常时,子类不能throws受检异常,但可以throws非受检异常。
父类方法throws异常时,子类不必throws任何异常,或者throws的异常必须是同类型或者子类(即删除或替换异常规则)。
Error和 RuntimeException 类及其他们的子类应该不出现在throws列表中。
参考:http://www.tutorialspoint.com/java/java_exceptions.htm
http://tutorials.jenkov.com/java-exception-handling/index.html
http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html
http://www.javaworld.com/article/2076700/core-java/exceptions-in-java.html
Java 8 Exception Handling Develop Reliable Java Applications (Black Book Series) - Mahavir DS Rathore
(https://yunpan.cn/ckzJdHGh8I78b 访问密码 e580)