异常结构:
try {
} catch (Exception e) {
// TODO: handle exception
}finally{
}
异常机制:程序出现错误后程序如何处理,控制权交给异常处理器。(异常都是在运行中的,不是编译
时的)
异常处理流程:遇到错误,方法立即结束,同时抛出一个异常对象。调用该方法的程序停止,并搜索
一个可以处理该异常的,并执行其中的代码。
Error及RunTimeException及其子类为未检测异常,及自己会跑出不需要程序员抛出;而其他为已检测
异常,需要程序员抛出。
1、Error体系描述了java运行中的内部错误以及资源耗尽的情形,一般由虚拟机抛出。
2、Exception体系包括RunTimeException和其他非RunTimeException体系:
(1)RunTimeException体系包括错误的类型转换、数组越界访问和试图访问空指针。一定是程序员的
错误。例如可以通过检查数组下标和数组边界来避免数组越界访问异常。
(2)其他一般都是外部错误,例如试图从文件尾后读取数据,这并不是数据本身的错误,而是在应用
环境中出现的外部错误。
客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语
句抛出异常。遇到Error,程序员一般是无能为力的;遇到RuntimeException,那么一定是程序存在逻辑错
误,要对程序进行修改(相当于调试的一种方法);只有已检查异常才是程序员所关心的,程序应该且仅应
该抛出或处理已检查异常。
异常处理:
1、既然捕获了异常,就要对它进行适当的处理。不要捕获异常之后又把它丢弃,不予理睬。
2、在catch语句中尽可能指定具体的异常类型,必要时使用多个catch。不要试图处理所有可能出现的异常。
3、保证所有资源都被正确释放。充分运用finally关键词。
4、在异常处理模块中提供适量的错误原因信息,组织错误信息使其易于理解和阅读。例如当前正在执行的类、方法和其他状态信息,包括以一种更适合阅读的方式整理和组
织printStackTrace提供的信息。
5、尽量减小try块的体积。
6、全面考虑可能出现的异常以及这些异常对执行流程的影响。
访问异常信息:
getMessage():返回该异常的详细描述字符串。
printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。
printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定输出流。
getStackTrace():返回该异常的跟踪栈信息。
java异常跟踪栈:
面向对象的应用程序运行时,经常会发生一系列方法调用,从而形成“方法调用栈”,异常的传播则相反:只要异常没有被完全捕获,异常就会从发生异常的方法逐渐向外传播,首先传给该方法的调用者,再传给调用者的调用者。。。。直至最后到main方法,如果main方法依然没有处理该方法,JVM则会终止该程序,并打印异常的跟踪栈信息。
常见异常:
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
文件未找到异常:FileNotFoundException
方法未找到异常:NoSuchMethodException
索引出界:IndexOutOfBoundsException
非法参数 :IllegalArgumentException