java异常处理


前言

本文主要介绍Java中try+catch异常处理流程和finally语句块的一些细节。
注在前头:不做只打印的程序员,要做会补救的工程狮


一、什么是异常?

异常是在程序中导致程序中断运行的一种指令流。
例如,现在有如下的操作代码:

public class ExceptionDemo01{ 
	public static void main(String argsp[]){ 
		int i = 10 ; 
		int j = 0 ; 
		System.out.println("============= 计算开始 =============") ; 
		int temp = i / j ; // 进行除法运算 
		System.out.println("temp = " + temp) ; 
		System.out.println("============= 计算结束 =============") ; 
	} 
}

运行结果:
在这里插入图片描述
以上的代码在“int temp = i / j ;”位置处产生了异常,一旦产生异常之后,异常之后的语句将不再执行了,所以现在的程序并没有正确的执行完毕之后就退出了。
那么,为了保证程序出现异常之后仍然可以正确的执行完毕,所以要采用异常的处理机制。

二、异常处理

1.异常处理格式

如果要想对异常进行处理,则必须采用标准的处理格式,处理格式语法如下:

try{
// 有可能发生异常的代码段
}catch(异常类型1 对象名1){
// 异常的处理操作

}catch(异常类型2 对象名2){
// 异常的处理操作
} ...
finally{
// 异常的统一出口
}

2.try+catch的处理流程

  1. 一旦产生异常,则系统会自动产生一个异常类的实例化对象。
  2. 那么,此时如果异常发生在try语句,则会自动找到匹配的catch语句执行,如果没有在try语句中,则会将异常抛出。(抛给调用这个方法的人,抛给调用产生异常的方法的代码位置)
  3. 所有的catch根据方法的参数匹配异常类的实例化对象,如果匹配成功,则表示由此catch进行处理。
    在这里插入图片描述

3.finally

在进行异常的处理之后,在异常的处理格式中还有一个finally语句,那么此语句将作为异常的统一出口,不管是否产生了异常,最终都要执行此段代码。(就算try里面return了,也要执行。事实上是先执行finally,再执行return。电脑关机了、停电了等等finally就执行不了)

三、finally深究

  1. finally是必然执行的异常统一处理出口,无论是否发生异常,finally必然执行
  2. 即使try和catch中有return,也是先执行finally再return。但是最后的结果可能有所不同:
    (1)如果return的变量是引用数据类型,而finally中修改了变量的值,那么最终的返回值是finally修改后的值;
    在这里插入图片描述
    (2)如果return的变量是基本数据类型,而finally中修改了变量的值,此时最终的返回值是原来的值,不被finally所影响。
    在这里插入图片描述
    出现上面两种不同情况的原因是:return时,会先备份变量赋值符右边的东西,引用数据类型备份的是地址,而finally修改时是将地址所指的堆内存中的值修改了,当return进行时还是会根据备份的地址找堆内存中的值进行返回,所以返回值会随之改变;而基本数据类型备份的是那个值,即使finally修改了,也是修改的栈内存中的值,而return返回的是备份的值,备份的值不会被修改,所以返回值不会发生变化。
  3. 电脑关机了、停电了等等,内存没了,finally会无法执行
  4. 唯一一种用代码的方式阻止finally执行:
System.exit(0);//退出JVM

这行代码作用是退出虚拟机结束任务,软件就关闭了,finally自然就无法执行了。
参数列表中的值是0/1/2/3,0表示正常退出,其他表示非正常退出。

(完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值