网站首页 > 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抛出异常什么意思
你 发表评论:
欢迎- 04-26Java高效处理大文件读写的全方位指南
- 04-26省钱兄JAVA视频交系统开发
- 04-26Java常用工具类技术文档
- 04-26高效使用Java构建工具,Maven篇|云效工程师指北
- 04-26Java中自定义配置文件可以如此简单
- 04-26Java 技术文档(详细版)
- 04-26DuckDuckGo应用和扩展全面禁止谷歌的单点登录弹窗
- 04-26单点登录的终级解决方案-xxlSso
- 最近发表
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)