异常的处理方式1

1.方式一(抓抛模型):try-catch-finally
  • 过程1:“抛”:程序在执行的过程中,一旦出现异常,就会在出现异常的代码处,生成对应异常类的对象,并将此对象抛出。一旦抛出,此程序就不执行其后的代码了。
  • 过程2:“抓”:针对于过程1抛出的异常对象,进行捕获处理。此捕获处理的过程,就称为抓。一旦将异常进行了处理,代码就可以继续执行。
2.基本结构:
try{
    ...... //可能产生异常的代码
}catch(异常类型1 e){
    ...... //当产生异常类型1型异常时的处理措施
}catch(异常类型2 e){
    ...... //当产生异常类型2型异常时的处理措施
}finally{
    ...... //无论是否发生异常,都无条件执行的语句
}
3.使用细节:
  • 将可能出现异常的代码声明在try语句中。一旦代码出现异常,就会自动生产一个对应异常类的对象,并将此对象抛出。
  • 针对try中抛出的异常类的对象,使用之后的catch语句进行匹配。一旦匹配上,就进入catch语句块进行处理。一旦处理结束,代码就可继续向下执行。
  • 如果声明了多个catch结构,不同的异常类型在不存在子父类关系的情况下,谁声明在上面,谁声明在下面都可以。如果多个异常类型满足子父类的关系,则必须将子类声明在父类结构的上面,否则报错。
  • catch中异常处理的方式:
    • 自己编写输出的语句。
    • printStackTrace():打印异常的详细原因。(推荐)
    • getMessage():获取发生异常的原因。
  • try中声明的变量,出了try结构之后,就不可以进行调用了。
  • try-catch结构是可以嵌套使用的。
4.开发体会:
  • 对于运行时异常:开发中,通常就不进行显示的处理了。一旦在程序执行中出现了运行时异常,那么就根据异常的提示信息修改代码即可。
  • 对于编译时异常:一定要进行处理,否则编译不通过。
5.finally的使用说明:
5.1finally的理解
  • 我们将一定要被执行的代码声明在finally结构中。
  • 更深刻的理解:无论try中或catch中是否存在仍未被处理的异常、retrurn语句等,finally中声明的语句都一定要被执行。
  • finally语句和catch语句是可选的,但是finally不能单独使用。
5.2什么样的代码我们一定要声明在finally中呢?
  • 我们在开发中,有一些资源(比如:输入流、输出流、数据库连接、Socket连接等资源),在使用完以后,必须显式的进行关闭操作,否则GC不会自动的回收这些资源。进而导致内存的泄露。
  • 为了保证这些资源在使用完以后,不管是否出现了未被处理的异常情况下,这些资源能被关闭。我们必须将这些操作声明在finally中!
6.final、finally、finalize的区别(面试题):
  • final 用于修饰变量、方法和类,分别代表不可变、固定不变和方法不可被继承。
  • finally 是异常处理的组成部分,用于确保在执行 try-catch 代码块之后,特定代码总是会被执行,即使出现了异常。
  • finalize 是 Object 类中的一个方法,用于在垃圾收集器准备回收对象时被调用,允许对象执行一些清理工作,但不应在其中执行耗时操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

该叫啥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值