【面试干货】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💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ElementPlus组件与图标按需自动引入

按需自动引入组件 1. 安装ElementPlus和自动导入ElementPlus组件的插件 pnpm install element-plus pnpm install -D unplugin-vue-components unplugin-auto-import 2. vite.config.ts进行修改 import { defineConfig } from vite import vue from vitejs/plugin-vue // …

T200S4高清4路SDI采集卡

产品简介: 同三维T200S4 4路高清SDI采集卡,可以同时采集4路SDI高清信号,卡上有4个SDI接口1个SDI环出转接口,配件有: 1个转SDI转接线,PCI-E2.0 X4,分辨率最高可以达到1080P/60HZ,带SDK开发包&am…

计算机网络:应用层 - 文件传输协议 FTP 电子邮件

计算机网络:应用层 - 文件传输协议 FTP & 电子邮件 文件传输协议 FTP电子邮件 文件传输协议 FTP 文件传送协议 FTP(File Transfer Protocol),曾是互联网祝频讲解上使用得最广泛的文件传送协议。 其特点是:若要存取一个文件,…

fastadmin中$searchFields解析

在控制器或者模型中添加这个属性: protected $searchFields goods_name,goods_brand,category.name,manystoreShop.name,goods_model; 查询sql拼接就会自携带;原理如下:

算法基础精选题单 模拟 (个人题解)

前言: 从今天开始刷牛客上的这份题单,为暑假的牛客多校集训做准备,题单上一共有237道题,要想在集训开始前刷完难度还是很大的,但我一定会坚持下来,希望在这段时间内我能真正入门算法竞赛。接下来这三道题都…

操作系统实战(一)(PV经典问题之生产者与消费者)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀操作系统 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 前言 进程互斥与同步 题目一 题目二 题…

在SQL中使用explode函数展开数组的详细指南

目录 简介示例1:简单数组展开示例2:展开嵌套数组示例3:与其他函数结合使用处理结构体数组示例:展开包含结构体的数组示例2:展开嵌套结构体数组 总结 简介 在处理SQL中的数组数据时,explode函数非常有用。它…

C#——装箱与拆箱详情

装箱与拆箱 装箱: 将值类型转换成引用类型的过程; 拆箱: 把引用类型转为值类型的过程,就是拆箱 装箱 拆箱

洗地机哪个品牌好?四大实力拔尖单品力荐

洗地机哪个品牌好呢?想必姐妹们肯定觉得保持家里清洁是非常重要的,但是每天打扫卫生真的会让人整个都要疯狂,这不,救星洗地机就能派上用场了,干垃圾湿垃圾统统都能一次清理干净。只需轻轻一推,就能把扫地、…

帝国cms批量取消文章审核-把已审核的文章改成未审核的方法

帝国cms很多人采集的时候,把文章弄成了审核过的文章,或者因为其他的原因,文章都是审核通过,为了seo又不能把全部文章放出来,所以需要把文章弄成未审核以下就是解决本问题的办法 首先来修改后台列表文件,自…

栈,队列,数组,链表

一.数据结构概述 数据结构是计算机底层存储,组织数据的方式。 是指数据相互之间是以什么方式排列在一起的。 数据结构是为了更加方便的管理和使用数据,需要结合具体的业务场景来进行选择。 一般情况下,精心选择的数据结构可以来更高的运行或者存储效率。 二.学好数据结构三大…

Leetcode - 132双周赛

目录 一、3174. 清除数字 二、3175. 找到连续赢 K 场比赛的第一位玩家 三、3176. 求出最长好子序列 I 四、3177. 求出最长好子序列 II 一、3174. 清除数字 本题可以使用栈来模拟,遇到数字弹出栈顶元素,遇到字母入栈。 代码如下: //使用字…

VMware虚拟机卡顿(虚拟机卡死)(调整所有虚拟机内存使其适应预留的主机 RAM (F)、默认进程优先级、不允许使用内存页面修整功能(M))

文章目录 设置编辑——首选项——内存——额外内存——调整所有虚拟机内存使其适应预留的主机 RAM (F)(我把这个勾上了)编辑——首选项——优先级——默认进程优先级虚拟机——设置——选项——高级——不允许使用内存页面修整功能(M) 参考文章&#xff…

数据结构和算法之复杂度比较

数据结构和算法之复杂度比较 参考如下网址:https://www.bigocheatsheet.com/ 方便快速查询 1. 复杂度比较 2. 常见数据结构复杂度 3. 常见算法复杂度

如何用命令行方式便捷组合调用 AI 工作流?

(注:本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费) 我给你演示的总结长视频、起草博客文章,只是其中的冰山一角。 焦虑 有些小伙伴最近跟我反馈,看到他人演示的样例,见识…

VScode中js关闭烦人的ts检查

类似如下的代码在vscode 会报错,我们可以在前面添加忽略检查或者错误,如下: 但是!!!这太不优雅了!!!,js代码命名没有问题,错在ts上面,…

文案生成器,免费的文案生成器

在如今这个高速发展的社会,内容创作已经成为许多人工作和生活中不可或缺的一部分。然而,随之而来的就是“内卷”。不仅要高质量的内容还要写作效率。为了在内卷中脱颖而出,我们就需要使用文案生成器,一款能够帮助我们提升写作效率…

element-plus的Tour 漫游式引导怎么去绑定Cascader 级联选择器或者它的内容 popper

首先官方例子是用的button 官方.$el这个log出来是: 知道是以元素为准就拿对应的元素就行 级联选择器.$el是这样的: 你可以移入这个元素部分去看看是哪个要用的(好像谷歌还是狐火直接放上去就可以看到元素表示,但是我有时用谷歌只…

16.RedHat认证-Ansible自动化运维(中)

16.RedHat认证-Ansible自动化运维(中) 部署Ansible Ansible的Inventory文件 Inventory文件定义了ansible管理的主机,说白了就是Inventory文件中的内容是记录被管理的主机。 Inventory文件分为两种,一种是静态的Inventory文件,一种是动态的…

家有老人小孩,室内灰尘危害大!资深家政教你选对除尘空气净化器

哈喽,各位亲爱的朋友们!今天我们来聊聊每次大扫除时最让人头疼的问题——灰尘。你有没有发现,两天不打扫,桌子上就能积上一层灰;阳光一照,地板上的灰尘都在跳舞;整理被子的时候,空气…