异常处理

异常处理

在这里插入图片描述

异常是程序在执行过程中所产生的问题。
1.用户的非法操作 2.程序员在编写代码时,糟糕的设计 3.来自于硬件设备的故障

异常的分类:
检查异常:编译期间,编译器能检查出来的错的异常
运行时异常:运行时,抛出的异常。编译器无法检查出来。
错误:错误已经脱离了“异常”的范畴,无法通过修改代码解决问题。如:内存不足、硬盘空间不够、网络问题等。

异常处理
在java中有3种方式:

  1. 方法本身直接抓捕异常,不让异常对象沿着方法调用栈,继续向下传递。
  2. 方法抓捕异常并抛出。
  3. 不抓获异常,让异常对象沿着调用栈,继续向下传递,并抛出。
    其中2,3都会使抛出异常的方法,弹出调用栈
    方法后:
    Throws 关键字,用来给方法的调用者,提前申明:该方法可能会抛出异常
    事务:具有明确边界,执行有序的。事务只有成功和失败。
    事务中的任何业务方法出现异常,整个事务就是失败的。
    事务中的任何业务方法都不能自己抓捕异常,是声明异常,必须外部整体管理。
    当方法的调用者,需要知道“调用方法”的具体执行情况,而并非是成功或失败时,有必要针对“调用方法”进行异常声明。比如:Transfer()想知道“张三给李四转钱5000”这个过程中,所有的执行方法具体执行情况时。
    在方法异常声明时,如果遇到子异常和父异常都可能抛出的情况,建议声明父异常。原因是父异常可以自动向上转型。

方法异常的声明,通常用于编译异常,而运行时异常,不需要。
在代码中要抛出某个异常,使用throw关键字。
当一个方法中,可能会抛出不计数的异常个数,解决方法如下:

  1. 定义多个catch块,分别进行代码的监控
  2. 在catch块的参数类型定义时,直接定义上层父类,采用动态多态的方式来解决问题。
    另外需注意的是:
    在定义多个Catch块时,定义顺序需遵循从小到大的顺序。(类与子类)

Throwable类
GetMessage和printStackTrace
在这里插入图片描述

编译时异常的解决方案:

  1. 异常处理
  2. 给方法的调用者进行“异常声明”

运行时异常解决方案:
不需要异常处理,也不需要“异常声明”,让它报错,再通过条件控制语句对其进行控制。
捕获异常

Try{
     

}catch(Exception e){


}finally{

}

在try中声明的变量,无法在try之外使用。
当Try中的语句发生异常,将执行catch中的代码块。Try中未发生异常,将忽略catch块中内容。当有多个Catch块时,将从上到下依次执行。当一个异常抛出时,与它相匹配的catch块执行。如果没有catch块匹配抛出的异常,那么系统会在堆栈中搜索。无论抛不抛异常,finally都会执行。用于异常捕获过程中收尾的事情。如:关闭链接、清空内存。
Return 无论放在try 还是catch中,Finally始终执行在return之前即finally始终会执行。Return

Final可选修饰符,用于变量、方法、类。
变量会变成常量;方法会变成最终方法,不可重写;类会变成最终类,无法继承。
Finally 常用于异常捕获收尾工作。
Finalize 垃圾回收

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值