如何在方法声明中使用throws IllegalArgumentException?示例实现答疑
如何编写带有
throws IllegalArgumentException的方法? 刚好最近经常写这类参数校验的代码,来给你一步步讲清楚~
针对你说的「仅当参数d>0时返回d,否则抛出IllegalArgumentException」的需求,实现起来并不复杂,而且完全不需要用到try{}catch{}块,原因我后面会细说。先看具体的实现代码:
完整实现示例
public double getPrice(double d) throws IllegalArgumentException { // 先做参数合法性校验 if (d <= 0) { // 主动抛出异常,建议带上明确的错误提示,方便调试 throw new IllegalArgumentException("参数d必须大于0,当前传入的值是: " + d); } // 参数合法时正常返回 return d; }
关于try{}catch{}的疑问
为什么不需要try-catch?因为IllegalArgumentException属于RuntimeException(运行时异常),这类异常的设计初衷就是用来表示「调用者犯了错误」(比如传了非法参数)。我们这里是主动抛出异常来提醒调用者“你传的参数不对”,而不是捕获处理这个异常。try-catch是用来处理那些可能意外发生的异常、让程序能继续运行的,而这里的场景是我们主动触发异常,把处理的责任交给调用方——调用者可以选择捕获这个异常做处理,或者让它继续往上传播。
举个调用的例子,调用者可以这样处理异常:
public static void main(String[] args) { try { double validPrice = getPrice(10.5); System.out.println("正常价格: " + validPrice); // 传入非法参数,会触发异常 double invalidPrice = getPrice(-3.0); } catch (IllegalArgumentException e) { // 捕获异常并处理,比如打印错误信息 System.err.println("参数错误: " + e.getMessage()); } }
关键点总结
- 方法声明里的
throws IllegalArgumentException是可选的,但加上它能更清晰地告诉调用者这个方法可能会抛出该异常,提升代码的可读性和可维护性 - 实现逻辑:先校验参数,不满足条件时用
throw new IllegalArgumentException(...)主动抛出异常,参数合法则返回结果 - 不需要在当前方法里用
try{}catch{},除非你想在方法内部直接处理这个异常(但通常这类参数错误应该让调用者知晓并处理)
内容的提问来源于stack exchange,提问作者HaakonFlaar
相关产品推荐
相关产品推荐

