网站首页 > java教程 正文
Java 的异常处理模型基于以下三种操作:
- 声明一个异常(declaring an exception)
- 抛出一个异常(throwing an exception)
- 捕获一个异常(catching an exception)
声明异常
每个方法都必须声明它可能抛出的必检异常的类型,这称为声明异常(declaring exception)
- 不要求在方法中显式声明 Error 和RuntimeException (免检异常)
但是,方法要拋出的其他异常都必须在方法头中显式声明,这样,方法的调用者会被告知有异常。
为了在方法中声明一个异常,需要在方法头中使用关键字 throws,例如:
public void myMethod ( ) throws IOException {
// 方法体
}
//关键字 throws 表明 myMethod 方法可能会抛出异常 IOException
//如果方法可能会抛出多个异常, 就可以在关键字 throws 后添加一个用逗号分隔的异常列表:
public void myMethod()
throws Exceptionl, Exception2, … , ExceptionN
声明异常也是方法签名的一部分。因此,在继承类并重写父类的方法时,对子类方法的声明异常部分也有严格的要求:
- 如果父类的方法没有声明某种类型异常,那么在子类中重写该方法时也不能增加声明这种类型的异常。
- 也就是说,子类方法声明异常的范围不能超过父类方法声明的异常范围。
抛出异常
检测到错误的程序可以创建一个合适的异常类型的实例并抛出它, 这就称为抛出一个异常(throwing an exception)。
如:
某个程序发现传递给方法的参数与方法参数的要求不符(例如,方法中的参数必须是非负的,但是传入的是一个负参数), 这个程序就可以创建 IllegalArgumentException的一个实例并抛出它
IllegalArgumentException ex =
new IllegalArgumentException("参数错误");
throw ex;
或者使用下面的语句:
throw new IllegalArgumentException("参数错误");
一般情况下,Java API 中的每个异常类都至少包含两个构造方法:
一个无参构造方法 和 一个带 String 类型参数的构造方法。
该String类型的参数称为异常消息(exception message),可以调用getMessage()方法来获取该消息。
- 关于throws 与 throw
- throws 关键字用于声明异常,其位置是方法头部的最后,方法体开始的 { 之前。
- throw 关键字则用来抛出异常,其位置是方法体中。
- throw和throws关键字之间的联系
- 如果在某方法中使用throw抛出了某种 unchecked exception
- 而该throw语句并未使用 try-catch结构进行异常处理
- 则throw语句所在的方法必须使用throws关键字进行该异常类的声明,否则产生编译错误。
需要注意的是:
- 采用 throw关键字抛出异常之后,本次方法的调用即告结束,程序的流程直接返回到本次方法的调用者那里。尽管被调用的方法代码可能并没有全部执行,也没有执行return语句。
- 这与try块中的代码产生异常之后,直接运行相应的catch块,流程的转移方面二者是类似的。
猜你喜欢
- 2024-12-27 Java面试题throw和throws的区别,你能说清楚吗?
- 2024-12-27 异常处理(try-catch):甩锅(throws)_ java异常(Exception)处理
- 2024-12-27 Java异常之抛出异常详解和代码举例
- 2024-12-27 「Java·异常处理语句」throws/throw、try...catch、finally
- 2024-12-27 Java 抛出异常「throw」 java抛出异常什么意思
你 发表评论:
欢迎- 最近发表
-
- class版本不兼容错误原因分析(class更新)
- 甲骨文Oracle公司为Java的最新LTS版本做出改进
- 「版本发布」Minecraft Java开发版 1.19.4-pre1 发布
- java svn版本管理工具(svn软件版本管理)
- 我的世界1.8.10钻石在第几层(我的世界1.7.2钻石在哪层)
- Java开发高手必备:在电脑上轻松切换多个JDK版本
- 2022 年 Java 开发报告:Java 8 八年不到,开发者都在用什么?
- 开发java项目,选择哪个版本的JDK比较合适?
- Java版本选型终极指南:8 vs 17 vs 21特性对决!大龄程序员踩坑总结
- POI Excel导入(poi excel导入附件)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)