异常类及其用法

异常:程序执行过程中发生的不正常行为(异常是发生在程序执行过程中的,碰到某些代码执行不下去,这称为异常.编译错误不叫异常)

碰到异常后程序将不会继续执行

三大常见异常:

  1. 越界异常:数组索引下标非法
  2. 空指针异常:用值为null的指针访问成员变量或属性
  3. 类型转换异常:发生在两个毫无关系的类之间(要发生向下转型必须先发生向上转型)

当有多个异常时,只会抛出碰到的第一个异常

在java中异常也是类,程序抛出的异常其实是异常对象,只不过异常对象是JVM产生并返回给程序的

异常的结构体系:

异常体系的核心父类:

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

比如StackOverFlowError(栈溢出),OutOfMemoryError(堆溢出)

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

异常的另外划分:

  1. 受查异常/编译时异常:在程序编译时必须显示进行异常处理的异常(IOException,SQLException)
  2. 非受查异常:在程序编译时没有发生任何错误,但在程序执行时发生的异常.(Error,RunTimeException类及其子类都是非受查异常)

异常的解决流程:

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

  1. 异常的捕获并处理try - catch -finally代码块

try{

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

//try代码一定有

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

//若捕获到了相应类型的异常对象,该如何处理放在catch代码块中

//catch代码块可以有多个也可以不写

}finally{

//无论是否产生异常或者是否有对异常的处理都会执行的代码放在finally代码块中

//finally代码块一定会执行

//finally代码块可写可不写

}

当只有try和catch代码块时

  1. 当try块中没有产生异常时,不会执行catch块,程序正常执行结束
  2. 当try块中产生异常并被正确捕获时,执行相应的catch代码块,try中出现异常后的代码不再执行,异常体系之后的代码能够正确执行

关于catch捕获异常的说明:

catch代码块中只能捕获一种类型的异常,当try块中出现异常catch块中没有相对应的异常处理,则程序从产生异常处退出

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

若捕获到相应的异常之后想要输出错误产生的原因并输出错误的位置,可以通过异常对象的printStackTrace方法来进行打印输出.

若catch块有多个分支,且分支有父子关系的情况,一定是子类异常捕获写在父类异常捕获之前.进行异常捕获时程序由上往下执行,直到匹配到第一个符合的catch块就进入执行,且不会执行之后的catch块.

finally代码块有没有异常都会执行,会在方法返回之前执行.(关于资源关闭操作的代码都要写在finally代码块中如:文件的关闭,数据库链接的关闭,以确保该资源一定会被关闭)

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

正常编码JVM会保证finally的正常进行,若出现一些导致JVM进程直接退出的情况,finally才不会执行.eg.System.exit(0);

throw和throws

  1. throws:用在方法声明上,明确表示该方法可能会产生异常,但并不处理,若产生异常则将异常对象抛回给调用者处理;若在整个调用过程中没有处理异常,最终这个异常对象会被抛给JVM程序整个退出;

关键点:

  1. throws关键字在方法参数列表之后定义
  2. throws可以抛出多个异常,异常之间使用,分隔,若要抛出的异常对象有父子关系,只需要抛出父类对象即可
  3. throws抛出的必须是Exception类及其子类
  4. 若throws抛出的是受查异常,则调用者必须显示的进行异常处理(要么继续向上抛出异常,要么使用try-catch捕获)

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

关于自定义异常:

JDK内部提前定义了很多异常,这些异常在具体的业务场景下是不够用的;所以需要我们继承异常类,拓展属于更符合业务逻辑的异常类

需要拓展非受查异常类,就继承RunTimeException类

需要拓展受查异常类,就继承Exception类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值