Java异常处理

异常处理:

一:异常:

程序在运行过程中出现的不正常的现象

二:分类:

异常和错误的区别:异常是程序员能够处理的情况,而错误一般是硬件,运行环境设计等原因导致的,程序员不能去处理的情况

运行时异常和编译时异常的区别:一般来说,运行时异常为语义错误,而编译时异常为语法错误,连编译都无法通过;

 

三:异常处理 ——抓住异常

1.三个主要的关键字:

try(程序块中可能有异常) -> catch(如果有异常,那么进入到catch中处理) -> finally

try:包含可能产生异常的块,必须书写

catch:异常处理块(可有多个,也可以一个catch匹配多种异常类型;注意语法);先与tay中产生的异常进行匹配,若匹配成功,则进入执行;

finally:finally块不管异常是否发生,只要对应的try执行了,则它一定也执行(即使在catch中有return 也会执行)。(值得注意:当catch中有return语句,finally语句中也有return语句,则catch中的return会被覆盖,故finally语句中不应该有return语句,)只有一种方法让finally块不执行:System.exit()(//关闭虚拟机);因此finally块通常用来做资源释放操作:关闭文件,关闭数据库连接等等。

注意区别:

final:方法修饰符

finall:异常处理的关键字

finalize:它是Objec的一个方法(垃圾回收时调用)

2.处理步骤:

情况一:有了try-catch处理,程序在运行过程中,出现了异常,并在处理时产生的异常和catch的异常匹配,进入catch处理,异常处理结束;

情况二:有了try-catch处理,程序在运行过程中,没有出现了异常,不进入catch处理,异常处理结束;

情况三:有了try-catch处理,程序在运行过程中,出现了异常,但和catch匹配失败,程序终止运行;

情况四:有了try-catch处理,并有多个catch处理块,程序在运行过程中,出现了异常,和catch自顶向下依次匹配,若匹配成功,则执行,异常处理成功,若全部匹配失败,程序终止运行;

情况五:finall块不管发生什么情况都会执行

 

注意事项:

异常处理代码的书写顺序:Try->catch->finally

Try为可能产生异常的块,必须书写

catch为处理异常的块,必须书写,可以有1~N个

finally可写可不写

如果有多个catch块,必须按先子类后父类的顺序书写,否则报错;

 

常见异常:

java.long.ArithmeticException 数异常

java.long.ArrayIndexOutOfBoundsException 数组越界

java.long.IllegalArgumtException 方法的参数错误

ClassCastException 类型强制转换错误

java.long.NumberFormatException

FileNotFoundException 文件未找到异常

SQlException 操作数据库异常

IOException 输入输出异常

总结:

一:

finally可以没有,也可以只有一个。无论有没有发生异常,它总会在这个异常处理结构的最后运行。
即使你在try块内用return返回了,在返回前,finally总是要执行,这以便让你有机会能够在异常处理最后做一些清理工作。
如关闭数据库连接等等。
注意:如果没有catch语句块,那么finally块就是必须的。


1、不管try,finally都会执行;
2、在try中return,在finally执行前会把结果保存起来,即使在finally中有修改也以try中保存的值为准,但如果是引用类型,修改的属性会以finally修改后的为准;
3、如果try/finally都有return,直接返回finally中的return



1、不管有没有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,

     管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;

4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

 

 

四:异常处理——抛出异常

通过throw语句手动显式的抛出一个异常

步骤:在方法声明时,用 throws 异常类型 先声明可能要抛出异常;

可用try产生异常,用catch处理时用 throw 异常对象 抛出异常;

在主调函数中用try接收,catch处理,可再次抛出,或常规处理;

五:自定义异常

如果要自定义异常类,则扩展Exception类即可,因此这样的自定义异常都属于检查异常(checked exception)。如果要自定义非检查异常,则扩展自RuntimeException。

 

方法:

e.printStackTrace(); //打出错误的堆栈信息

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值