Java 之异常

1 概述

Java程序在运行过程中出现的错误,如除数为零、空指针、数组越界等

2 分类

Throwable:异常类的父类

Error:极其严重的问题,如内存溢出,我们不作处理

Exception

    RuntimeException:运行时异常,一般是代码不够严谨导致,需要修改代码,所以也不处理

    编译是异常:Exception 中除去 RuntimeException 部分,必须处理,因为不处理不能通过编译。

3 异常处理

如果我们没有处理异常,JVM 会做出默认处理:将异常名称、原因及出现的问题输出在控制台,并结束程序。

处理格式:

JDK7 以前

注意:

try{} 中的代码越少越好,尽可能明确 catch 中的异常类型,如果实在不清楚,可以用父类替代,并且辈分越高的异常越放在后面。

catch(Exception e){} 中必须有内容,即便是一个提示消息

当 try{} 中有多个异常时,一旦异常出现,出现异常后面的代码将不会被执行

JDK7 以后

注意:

该代码虽然简洁,但是不同的异常处理却是相同的,而且各个异常必须是同辈的异常

即便是try和catch中有return语句,finally中的语句也会被执行

如图中代码所示

当程序执行到 catch 中 return a 时,就已经形成了return 30 的返回路径。但因为有 finally,所以程序会跳转到 finally 并执行,等待 finally 中的语句执行完毕后在执行 return 30。

4 异常声明和抛出

  • 声明异常

使用 throws 关键字在方法后面声明抛出异常

注意:

throws 必须跟在方法后面,并且可以声明抛出多个异常,用 "," 隔开即可。

尽量不要在main()上声明抛出异常

  • 抛出异常

格式:throw 异常对象

例: throw new Exception("抛出一个异常");

5 throw 和 throws 的区别

  • throw

用在方法体内,跟的是异常对象

只能抛出一个异常对象

表示抛出一个异常,由方法体内的语句处理

执行throw一定抛出了某种异常

  • throws

用在方法声明后面,跟的是异常类名,可以多个异常类名,用逗号隔开,表示方法可能抛出异常,由方法的调用者处理

执行throws表示可能出现异常,但不一定会发生 

  • 注意

子类重写父类方法时,子类的方法只能抛出父类方法声明的异常或其子异常

父类方法如果声明抛出多个异常,子类重写方法声明抛出的异常只能是父类方法声明抛出异常的子集

如果父类方法没有声明抛出异常,那么子类也不能声明抛出异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值