在Java里throw和throws有什么区别_Java异常抛出机制说明-java教程

throw用于方法体内主动抛出异常对象,需用new创建实例,执行后中断流程;抛出RuntimeException子类无需处理,抛出Exception等受检异常则必须try-catch或throws声明。

throw 是“真扔”,throws 是“预告要扔”——一个执行动作,一个契约声明。

throw 怎么用?在方法里主动抛出一个异常对象

它必须出现在方法体内部,后面跟的是 new 出来的异常实例,一执行就中断当前流程,后续代码不运行。

  • 只能抛一个异常对象,比如 throw new IllegalArgumentException("用户名不能为空")
  • 抛 RuntimeException 及其子类(如 IllegalArgumentException、NullPointerException)时,编译器不强制你处理;但抛 Exception 或 IOException 这类受检异常(checked exception),就必须用 try-catch 包住,或在方法上加 throws 声明
  • 常见误写:throw IllegalArgumentException(错!缺 new 和括号),正确是 throw new IllegalArgumentException("xxx")
  • 典型场景:参数校验失败、业务规则被破坏(如年龄为负数、订单状态非法)
public void setAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("年龄不能为负数"); // ✅ 正确:抛对象
    }
    this.age = age;
}

throws 怎么用?在方法签名末尾声明可能抛出的异常类型

它不抛异常,只是告诉调用者:“我这个方法内部可能会冒出这些异常,你得自己兜着。”

  • 写在方法返回类型之后、方法体之前,后面跟的是异常类名,不是对象,比如 throws IOException, SQLException
  • 可声明多个异常,用逗号分隔;只对受检异常有编译强制约束,运行时异常加不加都行(但加了更利于调用方预判)
  • 子类重写父类方法时,throws 声明的异常类型不能比父类更宽(比如父类声明 throws IOException,子类不能改成 throws Exception)
  • 本质是责任上移:你不想在本层处理,就用 throws 把异常“甩”给上层调用者
public void readFile(String path) throws FileNotFoundException, SecurityException {
    File file = new File(path);
    if (!file.exists()) {
        throw new FileNotFoundException("文件不存在: " + path); // ✅ 内部 throw,外部 throws 呼应
    }
    // ...
}

为什么它们经常一起出现?配合使用才符合 Java 异常处理逻辑

单独用 throw 抛受检异常却不声明 throws,编译直接报错;只写 throws 却没在方法里真正 throw,虽然不报错,但属于“虚假预警”,会误导调用方。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 在Java里throw和throws有什么区别_Java异常抛出机制说明-java教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3997899+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3997899+
  • 本周更新: 0+
  • 最后更新: 2026-03-16