Java中throws 与 throw 的区别与用法示例详解

 更新时间:2025年09月06日 09:42:46   作者:菜鸟不学编程  
本文给大家介绍Java中throws与throw的区别与用法示例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

一、先看最短总结

关键字作用出现位置常用于
throw抛出一个异常对象(实际动作)方法体内部立即抛出某个异常
throws声明方法可能抛出的异常类型(承诺/说明)方法声明处告诉调用者“我可能抛异常”

一句话记忆:

throw 是“扔出异常”,throws 是“声明可能会扔异常”。

二、throw:真正“扔出”异常

throw 用于在方法内部创建并抛出一个异常对象,程序执行到 throw 就会立刻中断,并把异常抛给调用者,或者被当前方法内部的 try-catch 捕获。

语法:

throw new 异常类型("异常信息");

示例 1:手动抛出异常

public class ThrowExample {
    public static void main(String[] args) {
        int age = -5;
        if (age < 0) {
            throw new IllegalArgumentException("年龄不能为负数!");
        }
        System.out.println("年龄是:" + age);
    }
}

输出:

Exception in thread "main" java.lang.IllegalArgumentException: 年龄不能为负数!
    at ThrowExample.main(ThrowExample.java:5)

解释:

  • throw 立刻抛出一个异常对象。
  • 后续代码不会执行。

示例 2:配合 try-catch 捕获异常

public class ThrowExample {
    public static void main(String[] args) {
        try {
            checkAge(-5);
        } catch (IllegalArgumentException e) {
            System.out.println("捕获到异常:" + e.getMessage());
        }
    }
    public static void checkAge(int age) {
        if (age < 0) {
            throw new IllegalArgumentException("年龄不能为负数!");
        }
        System.out.println("年龄是:" + age);
    }
}

输出:

捕获到异常:年龄不能为负数!

🎯 要点:

  • throw 后面是一个异常对象。
  • 一旦执行 throw,程序会跳出当前方法,除非被 try-catch 捕获。

三、throws:声明可能抛出的异常

throws 并不真正抛出异常,而是用于声明“我这个方法 可能 抛出某种异常”,提醒调用者必须关注这个异常。

语法:

修饰符 返回值类型 方法名(参数列表) throws 异常类型1, 异常类型2, ... {
    // 方法体
}

示例:声明方法可能抛异常

比如读文件时,FileReader 的构造方法可能抛 FileNotFoundException,你就必须用 throws 声明:

import java.io.FileReader;
import java.io.FileNotFoundException;
public class ThrowsExample {
    public static void main(String[] args) {
        try {
            readFile("test.txt");
        } catch (FileNotFoundException e) {
            System.out.println("捕获到异常:" + e.getMessage());
        }
    }
    public static void readFile(String path) throws FileNotFoundException {
        FileReader fr = new FileReader(path);
        System.out.println("文件读取成功!");
    }
}

如果不写 try-catch,而又不在方法签名里写 throws,编译器会报错。

🎯 要点:

  • throws 出现在方法声明处,表示 可能 抛出的异常类型。
  • 调用方要么:
    • try-catch 捕获;
    • 或者继续在自己的方法上声明 throws

四、throw 和 throws 的区别

比较throwthrows
位置方法体内方法声明处
作用真正抛出异常声明可能会抛异常
后面跟异常对象异常类型(类名)
数量一次只能抛一个异常对象可声明多个异常类型,用逗号分隔
是否是执行动作否,仅声明

五、Checked 与 Unchecked 异常与 throws 的关系

Java 异常分两类:

  • Checked Exception(受检异常)
    • 编译器检查
    • 必须用 try-catch 或 throws
    • 如:IOException, SQLException
  • Unchecked Exception(运行时异常)
    • 编译器不会强制检查
    • 不一定需要写 throws
    • 如:NullPointerException, IllegalArgumentException

⚠️ throws 主要用于声明 Checked Exception。

示例:throws 通常声明 Checked Exception

public void readData() throws IOException {
    // code that may throw IOException
}

而对于 RuntimeException(Unchecked),一般不用写 throws:

public void divide(int a, int b) {
    if (b == 0) {
        throw new ArithmeticException("除数不能为零!");
    }
}

六、经典面试题

throw 和 throws 有什么区别?

简答:

throw 用于方法体内,真正抛出异常对象;
throws 用于方法声明处,表示该方法可能抛出哪些异常类型,提醒调用者处理。

✅ 重点记忆

  • throw:方法内部,真正扔出一个异常对象
  • throws:方法声明处,告诉外部“我可能会扔异常”
  • Checked Exception → 必须 throws 或 try-catch
  • Unchecked Exception → 可写 throw,不一定写 throws

这样,你是不是对 throwthrows 一下就清楚了呢?😎

到此这篇关于Java中throws 与 throw 的区别与用法示例详解的文章就介绍到这了,更多相关java throws 与 throw 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Security框架:如何使用CorsFilter解决前端跨域请求问题

    Security框架:如何使用CorsFilter解决前端跨域请求问题

    这篇文章主要介绍了Security框架:如何使用CorsFilter解决前端跨域请求问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Spring Boot @Conditional注解用法示例介绍

    Spring Boot @Conditional注解用法示例介绍

    这篇文章主要给大家介绍了关于Spring Boot @Conditional注解用法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • TCC分布式事务七种异常情况小结

    TCC分布式事务七种异常情况小结

    这篇文章主要为大家详细介绍了在整个TCC模型过程中可能会出现的七种异常情况,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • Struts 2 实现Action的几种方式

    Struts 2 实现Action的几种方式

    本篇文章主要介绍了Struts 2 实现Action的几种方式,Struts 2框架下实现Action类有三种方式,有兴趣的可以了解一下
    2017-10-10
  • Spring boot实现应用打包部署的示例

    Spring boot实现应用打包部署的示例

    本篇文章主要介绍了Spring boot实现应用打包部署的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Spring实战之使用Resource作为属性操作示例

    Spring实战之使用Resource作为属性操作示例

    这篇文章主要介绍了Spring实战之使用Resource作为属性,结合实例形式分析了spring载人Resource作为属性相关配置与使用技巧,需要的朋友可以参考下
    2020-01-01
  • 原生Java操作mysql数据库过程解析

    原生Java操作mysql数据库过程解析

    这篇文章主要介绍了原生Java操作mysql数据库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • SpringBoot连接Hive实现自助取数的示例

    SpringBoot连接Hive实现自助取数的示例

    这篇文章主要介绍了SpringBoot连接Hive实现自助取数的示例,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-12-12
  • SpringMVC中RequestBody注解的List参数传递方式

    SpringMVC中RequestBody注解的List参数传递方式

    这篇文章主要介绍了SpringMVC中RequestBody注解的List参数传递方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java集合与数组区别简介及相互转换实例

    Java集合与数组区别简介及相互转换实例

    这篇文章主要介绍了Java集合与数组区别简介及相互转换实例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01

最新评论