Java学习笔记(3)

一、异常分类

1、Throwable
是Java异常的顶级类,所有异常都继承于这个类;Error,Exception是异常类的两个大分类。

2、Error
Error是非程序异常,即程序不能捕获的异常,一般是编译或者系统性的错误,不由程序来处理。

3、Exception
Exception是程序异常类,由程序内部产生;Exception又分为运行时异常,非运行时异常类。

4、RuntimeException
运行时异常,特点是java编译器不会检查它,也就是说,当程序中可能出现这类异常时,会编译通过,但是在运行时会出现错误。

5、非RuntimeException
非运行时异常,程序必须进行处理的异常,编译不通过,必须捕获或者抛出。包括IOException、ClassNotFoundException、CloneNotSupportedException等。

ps:

  • Uncheckd Exception:编译器不会辅助检查,包括Error和RuntimeException。
  • Checkd Exception:编译器会辅助检查,即Exception的子类中所有非RuntimeException的类。
  • 以上二者并非实际的类。

二、异常处理

1、Java异常处理的目的

  • 允许用户即使保存结果
  • 抓住异常,分析异常内容
  • 控制程序返回到安全状态

 2、try-catch-finally:一种保护代码正常运行的机制

(1)结构特点:一个try,可以有多个catch,但只能有一个finally,且catch和finally二者至少有其中一个。

  • try:正常业务逻辑代码
  • catch:当try发生异常,将执行catch代码,若无异常,绕之。
  • finall:当try或catch执行结束后,必须执行finally。

(2)catch块可以有多个,每个有不同的入口形参。当已发生的异常与某个catch块中的形参类型一致,将执行该catch块的代码。如果没有一个匹配,catch则不会被触发;

进入catch块后,并不会返回到try发生异常的位置,也不会执行后续的catch块,一个异常只能进入一个catch块。

(3)若有finall块,无论怎样最后都会进入finally,finall一定会被执行。。

ps:

  • catch的异常匹配是按从上到下的顺序进行匹配的,所以一般是将小的异常写在前面,而大一些(宽泛)的异常则写在后面。
  • try-catch-finally的每个模块里也会发生异常,所以每个模块内部可以继续写一个完整的try结构。

3、throws

方法存在可能出现异常的语句,但不处理,那么可以使用throws来声明异常。

  • 调用带有throws异常(checked exception)的方法,要么处理这些异常,要么再次向外throws,直到main函数为止。
  • 带有throws的方法被覆盖,覆盖它的方法必须抛出同样的异常,或者该异常的子类。
  • 如果父类方法抛出多个异常,那么重写的子类方法必须抛出这些异常的子集,也就是不能抛出新的异常。

三、自定义异常

1、自定义异常,需要继承Exception类或其子类。

  • 继承自Exception,就变成Checked Exception。
  • 继承自RuntimeException,就变成Unchecked Exception。

2、自定义重点在构造函数

  • 调用父类Exception的message构造函数。
  • 可以自己定义成员变量。

3、在程序中采用throw主动抛出异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值