当前位置: 首页 > news >正文

【面试干货】throw 和 throws 的区别

【面试干货】throw 和 throws 的区别

  • 1、throw
    • 1.1 示例
  • 2、throws
    • 2.1 示例
  • 3、总结


💖The Begin💖点点关注,收藏不迷路💖

在Java中,throw和throws都与异常处理紧密相关,但它们在使用和含义上有明显的区别。

1、throw

throw 语句用于在方法体内明确地抛出一个异常。 当throw语句被执行时,它会立即终止当前方法的执行,并将指定的异常对象传递给调用该方法的代码。

重要概念:

  • throw 是具体向外抛出异常的动作:它抛出的是一个异常实例。

  • 执行 throw 一定是抛出了某种异常:在throw语句后,代码的执行会立即中断,并跳转到相应的异常处理代码(如catch块)。

1.1 示例

package com.example;public class ExceptionExample {public static void main(String[] args) {// 创建一个实例并调用可能抛出异常的方法// 注意:传递true来触发IllegalArgumentException异常ExceptionExample example = new ExceptionExample();example.exampleMethod(true); // 传递true以触发异常// 也可以尝试 example.exampleMethod(false); 来避免异常}public void exampleMethod(boolean someCondition) {try {// 假设这里有一些可能引发异常的代码if (someCondition) {// 如果someCondition为true,则抛出IllegalArgumentException异常// 提示:当someCondition为true时,将抛出异常throw new IllegalArgumentException("无效的参数");}// 如果someCondition为false,则不会抛出异常,并且可以继续执行下面的代码(如果有的话)// 提示:当someCondition为false时,不会抛出异常} catch (IllegalArgumentException e) {// 捕获IllegalArgumentException异常并打印堆栈跟踪// 提示:捕获到IllegalArgumentException异常,打印堆栈跟踪e.printStackTrace();}// 注意:catch块之后的代码将在捕获异常后继续执行,除非在catch块中再次抛出异常或遇到return语句// 提示:无论是否捕获到异常,此处的代码都会执行System.out.println("在可能的异常之后,方法继续执行。");}
}

在这里插入图片描述
由于main方法中调用exampleMethod时传递了true,因此会触发IllegalArgumentException,会在控制台看到异常的堆栈跟踪信息,并且随后会输出“在可能的异常之后,方法继续执行。”。

如果将main方法中的exampleMethod(true)改为exampleMethod(false),则不会抛出异常,并且只会输出“在可能的异常之后,方法继续执行。”。

在这里插入图片描述

2、throws

throws 关键字用于在方法声明中声明该方法可能会抛出的异常类型。

这并不意味着该方法一定会抛出这些异常,但它告诉方法的调用者需要准备处理这些类型的异常。

重要概念:

  • throws 主要是声明这个方法会抛出某种类型的异常:它允许方法的调用者知道需要捕获哪些类型的异常。

  • throws 表示出现异常的一种可能性:它并不保证方法在执行过程中一定会抛出这些异常。

2.1 示例

示例展示了如何在Java中定义一个可能抛出IOException的方法,并在该方法中模拟执行可能引发IOException的代码。当这个方法被调用时,如果发生IOException,调用者需要处理这个异常,或者继续向上抛出。

package com.example;
import java.io.IOException;public class ExceptionHandlingExample {// 定义一个可能抛出IOException的方法public void anotherExampleMethod() throws IOException {try {// 假设这里我们试图打开一个文件,但文件不存在,或者我们没有读取文件的权限// 这将会抛出IOException// new FileInputStream("nonexistentfile.txt");// 为了演示,我们直接抛出一个IOExceptionthrow new IOException("模拟的IO异常");} catch (IOException e) {// 在这个方法内部,我们选择处理这个异常// 但由于我们声明了throws IOException,所以我们选择不处理它,而是将它抛出throw e; // 或者使用 throw new IOException("新的错误信息", e); 来包装并重新抛出} finally {// finally块中的代码无论是否发生异常都会执行// 这是一个清理资源的好地方,比如关闭文件流或数据库连接System.out.println("finally块中的代码被执行了,用于清理资源。");}// 注意:由于我们在catch块中重新抛出了异常,所以这里的代码不会被执行// 因此,这行代码将会导致“无法访问的语句”编译错误// System.out.println("如果没有异常,这行代码将被执行。"); // 这行代码应该被删除或移到try块内部}public static void main(String[] args) {ExceptionHandlingExample example = new ExceptionHandlingExample();try {// 调用可能抛出IOException的方法example.anotherExampleMethod();} catch (IOException e) {// 在main方法中处理异常e.printStackTrace();System.out.println("捕获到了IOException,并进行了处理。");}// 注意:即使anotherExampleMethod抛出了异常,main方法中的后续代码仍然可以执行System.out.println("main方法继续执行...");}
}

在这里插入图片描述
anotherExampleMethod方法中抛出了一个IOException,并且这个异常被main方法中的catch块捕获并处理了。

当Java代码抛出一个异常且这个异常没有被立即捕获时,JVM(Java虚拟机)会开始寻找一个能够处理这个异常的catch块。

它首先会在抛出异常的try块中查找,如果没有找到,就会沿着方法调用栈向上查找,直到找到一个能够处理这个异常的catch块,或者直到到达方法调用栈的顶部(即程序的最顶层),这时JVM会终止程序并打印出未捕获的异常信息。

3、总结

1、throw 是实际抛出异常的动作,它中断方法的执行并传递异常对象。

2、throws 是声明方法可能会抛出的异常类型,它告诉方法的调用者需要准备处理这些异常。
在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

相关文章:

【面试干货】throw 和 throws 的区别

【面试干货】throw 和 throws 的区别 1、throw1.1 示例 2、throws2.1 示例 3、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java中,throw和throws都与异常处理紧密相关,但它们在使用和含义上有明显的区别。…...

安卓手机删除的照片怎么恢复?3个方法,小技巧大作用

你是否曾经不小心删除了手机里的珍贵照片,却不知道怎么恢复?别担心,今天我们就来分享几个简单的小技巧,帮助你轻松找回那些丢失的照片。这些技巧虽然简单,但却能发挥大作用,让你不再为丢失照片而烦恼。手机…...

Unity制作背包的格子

1.新建一个面板 2.点击面板并添加这个组件 3.点击UI创建一个原始图像,这样我们就会发现图像出现在了面板的左上角。 4.多复制几个并改变 Grid Layout Group的参数就可以实现下面的效果了...

道可云元宇宙每日资讯|厦门:运用元宇宙技术助力直播电商发展

道可云元宇宙每日简报(2024年6月20日)讯,今日元宇宙新鲜事有: 厦门:运用元宇宙技术助力直播电商发展 近日,厦门市商务局印发《厦门市促进直播电商高质量发展若干措施(2024年-2026年&#xff0…...

电脑怎么卸载软件?多个方法合集(2024年新版)

在电脑的日常使用中,我们经常需要安装各种软件来满足不同的需求,但随着时间的推移,可能会出现一些软件不再需要或需要更换的情况。此时,及时从电脑上卸载这些不必要的软件是非常重要的。它不仅可以释放硬盘空间,还可以…...

【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别

目录 写在开头 一、CNN的原理 1. 概述 2. 卷积层 内参数(卷积核本身) 外参数(填充和步幅) 输入与输出的尺寸关系 3. 多通道问题 多通道输入 多通道输出 4. 池化层 平均汇聚 最大值汇聚 二、手写数字识别 1. 任务…...

面试技巧:正确回答JavaScript中Map和Object的选择问题

在JavaScript的面试中,对于何时使用Map和Object的选择问题,是一个常见的考察点。这两个数据结构都能存储键值对,但它们各有优势和适用场景。本文将深入探讨两者的区别,并通过实际代码示例来指导您如何选择。 基本概念 Map&#…...

sd StableDiffusion库学习笔记

目录 DeepSpeed realesrgan BasicSR超分辨率,去噪,去模糊,去 JPEG 压缩噪声 segment_anything mmengine controlnet_aux accelerate transfersformer pytorch_fid einops compel transfersformer 文本嵌入调整库 报错&#xff1a…...

【单片机毕业设计选题24017】-基于STM32的禽舍环境监测控制系统(蓝牙版)

系统功能: 系统分为主机端和从机端,主机端主动向从机端发送信息和命令,从机端 收到主机端的信息后回复温湿度氨气浓度和光照强度等信息。 主要功能模块原理图: 电源时钟烧录接口: 单片机和按键输入电路: 主机部分电路: 从机部分电路: 资料获取地址 主…...

每天一个数据分析题(三百七十八)- 系统聚类

在系统聚类方法中,哪种系统聚类是直接利用了组内的离差平方和? A. 最长距离法 B. 重心法 C. Ward法 D. 类平均法 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python&#…...

守护系统稳定性的关键技术之看门狗

目录 一、独立看门狗 二、窗口看门狗 三、总结 看门狗定时器(Watchdog Timer,WDT)是嵌入式系统中至关重要的组件,用于监控和维护系统的稳定性。主要是用来监测单片机运行状态和解决程序引起的故障的模块。在由单片机构成的微型…...

【Linux】进程间通信上 (1.5万字详解)

目录 一.进程间通信介绍 1.1进程间通信的目的 1.2初步认识进程间通信 1.3进程间通信的种类 二.匿名管道 2.1何为管道 2.1实现原理 2.3进一步探寻匿名管道 2.4编码实现匿名管道通信 2.5管道读写特点 2.6基于管道的进程池设计 三.命名管道 3.1实现原理 3.2代码实现 四.…...

测试用例设计:提升测试覆盖率的策略与方法

测试用例设计:提升测试覆盖率的策略与方法 前言测试用例设计的原则提高测试覆盖率的方法测试类型的分析 测试用例设计的基本方法等价类划分边界值分析正交法判定表法因果图法 方法与策略方法策略 如何评价测试用例结论 前言 在软件开发过程中,测试用例设…...

【微服务】什么是Hystrix?一文带你入门Hystrix

文章目录 强烈推荐引言主要功能实现容错应用场景1. 远程服务调用2. 防止级联故障3. 网络延迟和超时管理4. 资源隔离5. 高并发场景6. 熔断与自动恢复7. 故障检测与监控 示例应用场景使用实例1. 引入依赖2. 创建 Hystrix 命令类3. 使用 Hystrix 命令4. 配置 Hystrix5. 实时监控集…...

AI学习指南机器学习篇-支持向量机超参数调优

AI学习指南机器学习篇-支持向量机超参数调优 在机器学习领域中,支持向量机(Support Vector Machines,SVM)是一种非常常用的监督学习模型。它通过寻找一个最优的超平面来进行分类和回归任务。然而,在实际应用中&#x…...

掉电安全文件系统分析

掉电安全FS 掉电安全的文件系统(Power-Fail Safe File Systems)被设计为在电源故障或系统崩溃的情况下仍能保持数据一致性的文件系统。这样的文件系统通常通过使用日志(journaling)或写时复制(copy-on-write&#xff…...

React-Redux学习笔记(自用)

1. 环境搭建 插件安装:Redux Toolkit和react-redux npm i reduxjs/toolkit react-redux2、 store目录结构设计 集中状态管理的部分会单独创建一个store目录(在src下)应用通常会有很多个子模块,所以还会有个modules目录&#x…...

【机器学习】:线性回归模型学习路线

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…...

C++设计模式——Flyweight享元模式

一,享元模式简介 享元模式是一种结构型设计模式,它将每个对象中各自保存一份数据的方式改为多个对象共享同一份数据,该模式可以有效减少应用程序的内存占用。 享元模式的核心思想是共享和复用,通过设置共享资源来避免创建过多的实…...

Github 2024-06-19 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-19统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3Rust项目2Go项目2JavaScript项目1Python项目1Dart项目1非开发语言项目1Ruby项目1HTML项目1项目化学习 创建周期:2538 天协议类…...

【ARM】如何通过Keil MDK查看芯片的硬件信息

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: 解决在开发过程中对于开发项目所使用的的芯片的参数查看的问题 2、问题场景: 在项目开发过程中,经常需要对于芯片的时钟、寄存器或者一些硬件参数需要进行确认。大多数情况下是需…...

elasticsearch的安装和配置

单节点安装与部署 我们通过docker进行安装 1.docker的安装 如果以及安装了docker就可以跳过这个步骤。 首先更新yum: yum update安装docker: yum install docker查看docker的版本: docker -v此时我们的docker就安装成功了。 2.创建网络 我们还需要部署kiban…...

华为云下Ubuntu20.04中Docker的部署

我想用Docker拉取splash,Docker目前已经无法使用(镜像都在国外)。这导致了 docker pull 命令的失败,原因是timeout。所以我们有必要将docker的源设置在国内,直接用国内的镜像。 1.在华为云下的Ubuntu20.04因为源的原因…...

1、C++编程中的基本运算 - 课件

一、基础知识 1、C程序的基本框架 // 预处理器指令&#xff0c;引入需要的头文件 #include <iostream> // 使用标准命名空间 using namespace std; // 主函数&#xff0c;程序的入口 int main() {// 局部变量声明// 程序逻辑代码// 返回值&#xff0c;表示程序正常结束…...

Java动态代理详解

文章目录 一、JDK动态代理1、关键类和接口2、实现步骤 二、CGLIB动态代理1、关键类2、实现步骤 三、总结 Java中的动态代理是一种设计模式&#xff0c;它允许在运行时创建代理对象&#xff0c;而不是在编译时。代理对象可以用来代理真实对象的方法调用。 Java中的动态代理主要…...

Python基础学习文档

一、Python入门 1.Python简介&#xff1a; Python是一种高级编程语言&#xff0c;用于多种应用&#xff0c;包括网站开发、数据科学、人工智能等。 Python具有语法简洁、易读性强、功能强大等特点。 2.安装Python ①访问Python官网&#xff08;https://www.python.org/&am…...

数据结构与算法笔记:基础篇 - 分治算法:谈一谈大规模计算框架MapReduce中的分治思想

概述 MapReduce 是 Google 大数据处理的三姐马车之一&#xff0c;另外两个事 GFS 和 Bigtable。它在倒排索引、PageRank 计算、网页分析等搜索引擎相关的技术中都有大量的应用。 尽管开发一个 MapReduce 看起来很高深。实际上&#xff0c;万变不离其宗&#xff0c;它的本质就…...

如何清除anaconda3缓存?

如果长期使用anaconda不清理缓存&#xff0c;会导致anaconda占用磁盘空间越来越多&#xff0c;甚至系统磁盘撑爆。 清除包缓存&#xff1a; 打开 Anaconda Prompt 或者命令行窗口。运行以下命令清除包缓存&#xff1a;conda clean --all这会清除所有的包缓存&#xff0c;释放磁…...

智慧校园发展趋势:2024年及未来教育科技展望

展望2024年及未来的教育科技领域&#xff0c;智慧校园的发展正引领着一场教育模式的深刻变革&#xff0c;其核心在于更深层次地融合技术与教育实践。随着人工智能技术的不断成熟&#xff0c;个性化学习将不再停留于表面&#xff0c;而是深入到每个学生的个性化需求之中。通过精…...

【Python机器学习系列】针对特定数据构建管道流水线进行机器学习预测(案例+源码)

这是我的第305篇原创文章。 一、引言 机器学习项目中有可以自动化的标准工作流程。在 Python scikit-learn 中&#xff0c;管道有助于明确定义和自动化这些工作流程。使用pipeline后&#xff0c;我们每一步的输出都会自动的作为下一个的输入。一套完整的机器学习应用流程如下&a…...

玉田县住房和城乡建设局网站/河南seo优化

《设备调试与网络优化》教学讲义应广大读者的要求&#xff0c;现将《设备调试与网络优化》一书的教学讲义PPT共享给大家&#xff0c;希望帮助网友和读者更好的学习书中的知识&#xff0c;谢谢&#xff01;...

钢结构/优化疫情防控 这些措施你应该知道

帧中继技术&#xff0c;在有些时候似乎比较容易让人感到模糊&#xff0c;今天来谈一下它的几个基本概念&#xff0c;DLCI、二层映射以及三种接口类型。一、DLCI在谈DLCI前&#xff0c;先稍微介绍一下帧中继&#xff0c;帧中继是一种使用了包交换方式的标准的广域网技术。简单来…...

大型做网站的公司/seo黑帽是什么

&#xff08;在windows系统中&#xff09; 1.进入cmd命令行&#xff1b; 2.在e盘创建目录&#xff1b; &#xff08;1&#xff09;进入e盘&#xff1b; &#xff08;2&#xff09;创建目录test:md test &#xff08;3&#xff09;进入test目录&#xff1a;cd test …...

门户网站模板免费下载/深圳经济最新新闻

这是我在拓朴上配置的单闭路由&#xff0c;可是老是分配不了IP 地址&#xff0c;请你们帮我看下 这是在交换机上的配置 Switch>en Switch# Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(config)#vlan 2 Switch(config-vlan)#ex Swi…...

上海公安门户网站警民互动/网站推广软件下载

1.安装 a.安装依赖 1 yum install -y ncurses-devel libaio-devel b.安装cmake 1 yum install -y cmake c.创建用户 1 useradd -s /sbin/nologin -M mysql d.经典三步曲 mysql-5.6.36.tar.gz下载源码包 1 #编译安装2 cmake . -DCMAKE_INSTALL_PREFIX/application/mysql-5.6.36…...

网站做的漂亮的企业/北京seo技术

今天抽空整理下很早以前写的java控制计算机的开机和关机&#xff0c;开机的后面重新整理些。现在先记录下关机相关的代码&#xff1a;关机命令&#xff1a;我用的关机命令就是shutdown了&#xff0c;相关的参考help文档。widows下&#xff1a;shutdown /?,linux下&#xff1a;…...