异常部分复习总结
异常的根类:java.lang.Throwable体系:
- Error:
严重错误Error,无法通过处理的错误,只能事先避免,好比绝症。 - Exception:
表示异常,异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是必须要处理的。好比感冒、阑尾炎。
异常(Exception)的分类:根据在编译时期还是运行时期去检查异常?
-
编译时期异常:
checked异常。在编译时期,就会检查,如果没有处理异常,则编译失败。(如日期格式化异常) -
运行时期异常:
runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。(如数学异常)
Object的非空判断:
public static <T> T requireNonNull(T obj)
:查看指定引用对象不是null。
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
声明异常throws
声明异常:将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理,那么必须通过throws进行声明,让调用者去处理。
关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)
异常注意事项
- 一次捕获多次处理时,若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。(多态,若子类下面则永远执行不到)
- 运行时异常被抛出可以不处理。即不捕获也不声明抛出。
- 如果finally有return语句,永远返回finally中的结果,避免该情况.
- 如果父类抛出了多个异常,子类重写父类方法时,抛出和父类相同的异常或者是父类异常的子类或者不抛出异常。
- 父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出