异常处理

异常是什么?

异常就是程序正常执行时出现的阻止程序继续执行的情况。

java异常体系

在这里插入图片描述
在java中Threable是所有异常类的根,所有的异常类都直接或者间接的继承自Threable。可以通过继承Exception或者Exception的子类来创建自己的异常类。
这些异常类主要分为:系统错误、和异常。
1、Error(错误): 这类错误是有java虚拟机抛出的,描述的时内部系统错误,一旦发生,只能尽量稳妥的终止程序。这是程序无法处理的错误。
2、Exception(异常): 描述的是由程序和外部环境所引起的错误,可以被程序捕获和处理。
RuntimeException(运行时异常): 继承自Exception。

常见的RuntimeException 有:
ArithmeticException:一个数除以0。
NullPointerExceptio:试图通过一个奴看看引用变量访问一个对象。
IndexOutBoundsException:数组下表超出范围。
IllegalArguementException:传递给方法的参数非法或不合适。

java语言又将派生于Error类或RuntimeException类的所有异常成为非受查异常,其他为受查异常

图中蓝色部分为受查异常,红色为非受查异常

注意: 所有的受查异常必须用try-catch块处理。如果一个方法可能抛出受查类型的异常,则方法声明中必须用throws显示说明;多个异常类型用逗号分隔。

异常处理

抛出异常:throw

throw new ArithmeticException();

捕获异常:catch

try{
    //可能抛异常的代码
}catch(异常类型 异常对象){

}finally{
   //异常的出口 无论什么情况都得执行finally,
   //不论try块中是否出现异常或者是否被捕获。
}

注意:(1)不能只有try,try后面必须跟一个catch或者finally.
(2)执行try中没有出现异常,则跳过catch子句。
(3)一旦try中语句出现异常,try代码块中的程序就不会继续执行,而是交给catch代码块来执行。
(4)查找处理对应异常的代码(异常处理器),这个查找过程为捕获一个异常。从当前方法开始,沿着方法调用链,从第一个到最后一个逐个检查catch块,判断异常是否匹配,若匹配,就将该异常对象赋值给所声明的变量,然后执行catch块的代码。如果没有找到异常处理器,java会退出这个方法,把异常传递给调用这个方法的方法,继续查找,如果在调用方法链中始终找不到异常处理器,程序就会终止并且在控制台上打印出错信息。

下面我们用一个例子来理解上述第四点
假设在main方法中method1,method1调用method1,method2调用method3,method3抛出异常。
在这里插入图片描述
解释:(1)如果异常类型是Exception3,他就会被method2中处理异常e3的catch块捕获。跳过statement5,然后执行statement6。
(2)若异常类型是Exception2,则退出method2,控制被返回给method1,y异常就会被method2中处理对应异常的catch块捕获,跳过statement3,执行statement4。
(3)若异常类型是Exception1,则退出method1,控制被返回给main,异常就会被main中处理对应异常的catch块捕获,跳过statement1,执行statement2。
(4)若异常没有被以上方法所捕获,程序就会终止,不执行statement1和statement2。

声明异常:throws

受查异常必须在方法声明时显示声明。

从异常中获取信息

异常对象中包含关于异常的有价值的信息,通常通过以下方法从异常中获取信息。
toString()
getMessage()
getStackTrance()

以上些内容参考Java语言程序设计【梁勇】第10版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值