异常:程序执行过程中发生的不正常行为

异常:程序执行过程中发生的不正常行为

异常时发生在程序执行过程中,碰到某些代码执行不下去,这种称为异常

语法的错误不是异常,编译阶段就是报错的,程序压根就没执行~语法,编译的错误是最容易解决的

程序开发中碰到最多的三大类异常:

越界异常:索引下表非法

NPE:空指针异常,通过一个值为null的引用调用成员方法/属性

类型转换异常:发生在两个毫无关系的类之间对象的转换(要发生向下转型首先得发生向上转型)

异常是有逻辑上的先后的

在Java中,异常也是类,一切皆对象其实程序抛出的异常,其实抛出的是异常对象~只不过这个对象是由JVM产生并返回给程序的

异常体系核心的两个父类

1.Error:JVM无法解决的严重问题,当出现Error类问题,程序是无法解决的只有退出~

栈溢出 Error StackoverflowError(栈溢出) OutOfMemoryError(堆溢出)

程序中栈和堆的内存不够了~

2.Exception:异常产生后,程序员可以通过异常的处理流程来解决此类问题,使得程序能继续执行

异常的另外划分模式:

受查异常(编译时异常)异常体系结构图中红色框对应的异常类,除了非受查异常都是受查异常

在程序编译时必须显示进行异常处理的异常,称为受查异常

非受查异常(运行时异常)异常体系结构图中Error、RuntimeException以及其子类均为非受查异常,对应蓝色框

程序编译时没有产生任何错误,但是程序执行时发生的异常称为非受查异常

异常处理的五个主要关键字:try catch finally throw throws

1.异常的捕获并处理 try-catch-finally代码块 (若产生异常,我自己处理~处理方式1)

try{

//可能产生的异常放在try代码块中

} [catch(异常类型 异常对象)] [0...N] {

//若捕获到了相应类型的异常对象,如何处理

//放在catch代码块中

} [finally] {

//无论是否有异常产生或者是否处理异常,最终一定会执行的代码放在finally代码块中

//finally中的代码一定会被执行到~~

}

第一种组合

try{

} catch(异常类型 异常对象) {

} catch.... {

}

a.当没有异常产生时,不走catch块 程序正常执行结束

b.当异常产生,且被正确的捕获到~

走相应的catch代码块,try代码块中从出现异常以后的代码不再执行

异常体系之后的代码能够正常执行

有异常处理之后,保证程序抛出异常之后,正确捕获该异常,就可以使得异常体系之后的代码可以继续执行

c.关于catch块捕获异常的说明

异常也是类,在catch代码块中只能捕获一种类型的异常

当try中出现的异常,在catch块中并没有相应的对应 此时观察程序运行

当try中可能会产生多种异常时,可以使用多个catch块来捕获;也可以捕获异常的父类,通过向上转型来进行异常捕获

若捕获到相应的异常之后,输出错误产生的原因以及出错的位置

通过异常对象的printStackTrace方法来进行打印输出~

多个catch块只会走一个,从上向下匹配,发现匹配的catch就进入,其他的不执行

若多个catch块有父子继承关系,先写子类,再写父类~

格式2:

try{

} [catch异常类型 异常对象e] {

} finally {

//无论是否产生异常,都会执行的代码块~

}

若finally有return语句~~ 无论是否有异常产生,都会返回finally的返回值,因此一般不在finally中写return语句

另一组处理异常的关键字 - 逻辑 处理方式2 若出现异常,我不处理,将异常抛回调用者处理 =》 甩锅操作~

throws:用在方法声明上,明确表示该方法可能产生某些异常,但是该方法不处理,若出现异常,将异常对象跑回给调用者处理

throw:用在方法内部,程序员在出现异常时,自己产生异常对象并向外抛出(原来异常对象是由JVM产生的,现在程序员自己产生异常对象),一般搭配自定义异常使用

无论是哪种方式产生的异常对象,JVM产生的还是咱自己throw new出来的对象,跟到底怎么产生异常对象无关

到底是否需要显示进行异常处理,要看这个异常对象是受查异常还是非受查

只要是受查异常,无论哪种方式产生的异常,都必须进行异常处理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值