专业的JAVA编程教程与资源

网站首页 > java教程 正文

throw 与 throws的区别,声明异常 与 抛出异常

temp10 2024-12-27 16:59:46 java教程 14 ℃ 0 评论

Java 的异常处理模型基于以下三种操作:

  • 声明一个异常(declaring an exception)
  • 抛出一个异常(throwing an exception)
  • 捕获一个异常(catching an exception)

声明异常

每个方法都必须声明它可能抛出的必检异常的类型,这称为声明异常(declaring exception)

throw 与 throws的区别,声明异常 与 抛出异常


  • 不要求在方法中显式声明 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块,流程的转移方面二者是类似的。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表