总结来说,throw是用来抛出一个具体的异常实例,而throws是用来声明方法可能会抛出哪些类型的异常,是对调用者的一种通知和要求。

1. throw
  • 作用: throw关键字用于在方法体内实际抛出一个异常实例。当程序运行到throw语句时,指定的异常会被创建并抛出,立即终止当前方法的执行,并将控制权转移给包含该方法的调用者的异常处理机制。
  • 使用时机: 当检测到某种错误条件或异常情况时,在方法内部使用throw来抛出一个异常对象,这个对象可以是系统预定义的异常类的实例,也可以是自定义异常类的实例。
  • 特点: throw总是伴随着一个异常实例,且其后的代码不会被执行,因为一旦抛出异常,当前的代码路径就会被中断。
2. throws
  • 作用: throws关键字用于声明方法可能抛出的异常类型,它出现在方法签名之后。这告知调用者该方法执行时可能会遇到的异常情况,要求调用者要么处理这些异常(使用try-catch语句块),要么继续向上层方法抛出这些异常。
  • 使用时机: 当一个方法无法处理或不打算处理某些异常时,可以在方法声明中使用throws来声明这些异常。这样做可以强制调用者意识到潜在的异常风险并做出相应的处理准备
  • 特点: throws后面可以跟随一个或多个异常类名,用逗号分隔,表示该方法可能抛出多种类型的异常。并且,throws声明并不意味着异常一定会被抛出,它只是声明了一种可能性。
3. 为什么有时候异常必须用throws声明而有时候不用?

如图



(图一)



(图二)

为什么会出现这种情况呢?其实了解过Java异常的人都知道,异常分为两大类,一类是运行时异常,一类是非运行时异常。运行时异常只能在运行时识别,所以编译器无法识别运行时异常,就算不throws出异常也是能编译通过的,而非运行时异常如果不throws出来,编译器就会识别到并报错。

Java基础:throw和throws的详解的更多相关文章

  1. “全栈2019”Java异常第十章:throw与throws区别详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  2. 《Java基础——break与continue用法详解》

    Java基础--break与continue用法详解       1. break语句: 规则: 1. 仅用于循环语句和switch语句当中,用于跳出循环. 2. 当只有一层循环时,则直接跳出循环,不 ...

  3. Java基础篇(JVM)——字节码详解

    这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...

  4. 再探Java基础——throw与throws

    http://blog.csdn.net/luoweifu/article/details/10721543 异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被卡死,处于一直等待 ...

  5. [java基础] 002 - 位运算符的详解和妙用

    一:位运算符详解 位运算符主要用来对操作数二进制的位进行运算.按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值. Java 语言中的位运算符分为位逻辑运算符和位移运算符两类, ...

  6. Java基础学习总结(86)——Java异常处理机制Exception抛出异常时throw和throws用法详解

    什么时运行时异常?什么是非运行时异常? 通俗的讲: 运行时异常:就是编译通过,运行时就崩了,比如数组越界. 非运行时异常:就是编译不通过,这时就得必须去处理了.不然就没法运行了. 全面的讲: Thro ...

  7. Java基础(basis)-----抽象类和接口详解

    1.抽象类 1.1 abstract修饰类:抽象类 不可被实例化 抽象类有构造器 (凡是类都有构造器) 抽象方法所在的类,一定是抽象类 抽象类中可以没有抽象方法 1.2 abstract修饰方法:抽象 ...

  8. “全栈2019”Java异常第九章:throws关键字详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  9. Java工程师 基础+实战 完整路线图(详解版)

    Java工程师 基础+实战 完整路线图(详解版)   Java 基础 Java 是一门纯粹的面向对象的编程语言,所以除了基础语法之外,必须得弄懂它的 oop 特性:封装.继承.多态.此外还有泛型.反射 ...

  10. 《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)

    1.简介 前面宏哥一连几篇介绍如何通过开源jar包Log4j.jar.log4j2.jar和logback实现日志文件输出,Log4j和logback确实很强大,能生成三种日志文件,一种是保存到磁盘的 ...

随机推荐

  1. MQTT GUI 客户端 可视化管理工具

    MQTT GUI 客户端 可视化管理工具 介绍 多标签页管理,同时打开多个连接 提供原生性能,并且比使用 Electron 等 Web 技术开发的同等应用程序消耗的资源少得多 支持 MQTT v5.0 ...

  2. redis系列02---缓存过期、穿透、击穿、雪崩

    一.缓存过期 问题产生的原由: 内存空间有限,给缓存设置过期时间,但有些键值运气比较好,每次都没有被我的随机算法选中,每次都能幸免于难,这可不行,这些长时间过期的数据一直霸占着不少的内存空间! 解决方 ...

  3. 8.7K+ Star!快速搭建个人在线工具箱

    大家好,我是 Java陈序员. 作为一名 "CV 工程师",每天工作中需要用到各种各样的工具来提高效率. 之前给大家安利过一款离线的开发工具集合,今天给大家推荐一款在线的开发工具箱 ...

  4. 五:大数据架构回顾-LambdaPlus架构

    Blink是阿里云在 Apache Flink 基础上深度改进的实时计算平台,Blink旨在将流处理和批处理统一,实现了全新的 Flink SQL 技术栈,在功能上,Blink支持现在标准 SQL 几 ...

  5. 【2023知乎爬虫】我用Python爬虫爬了2386条知乎评论!

    目录 一.爬取目标 二.展示爬取结果 三.爬虫代码讲解 3.1 分析知乎页面 3.2 爬虫代码 四.同步视频 五.完整源码 您好,我是 @马哥python说,一枚10年程序猿. 一.爬取目标 前些天我 ...

  6. linux-centos7.6-gpt-uefi安装

    目录 linux-centos7.6-gpt-uefi安装 一.需要 二.环境 三.vm新建虚拟机系统环境 四.开始安装 linux-centos7.6-gpt-uefi安装 一.需要 安装的系统适用 ...

  7. rpc 和 http的区别

  8. Rust 错误处理

    rust 处理错误,不使用 try catch, 而是使用 Result<T, E>. 简单的处理rust错误 在各种关于rust错误处理的文档中,为了解释清楚其背后的机制,看着内容很多, ...

  9. 报错:Client does not support authentication protocol requested by server; consider upgrading MySQL cli

    IDEA启动项目登录时显示用户或密码错误 或者 连接mysql数据库时报错 原因: mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是ca ...

  10. 超级详细的PostgreSQL创建数据库操作并附带图文

    首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485195&idx=1 ...