Java异常之throw,throws和Throwable

article/2025/10/3 21:54:45

Java异常处理中有throw开头的三兄弟,分别是throw,throws以及Throwable,那么他们之间到底怎么区分呢,且听我慢慢道来。

Throwable

Throwable是一个类,该类被异常类Exception以及错误类Error继承,其主要结构如下:

Throwable
       |-- Error 严重错误,如栈溢出,内存溢出等
       |-- Exception
            |- - CheckedException 可查异常,若不加处理,编译不通过
            |- - RuntimeException 运行时异常,可以进行编译

Java异常分为两种,一种是可查异常,即必须通过处理才能够进行编译,如FileNotFoundException等;另外一种是运行时异常,可以不用对其进行处理就能够编译,例如数组下标越界、除0等异常。

因此,Throwable作为所有异常的超类,在不知道发生何种异常的时候,可以直接使用Throwable来代替Exception或者各种具体的异常类。

throws

throws的作用是在方法声明的后面指明该方法可能会抛出异常(并不一定真的会出现异常)。如果在执行这个方法时出现异常,那么这个方法就不再执行了,而是抛出一个异常,把这个异常抛给调用他的方法,并且让调用他的那个方法去处理。

结合一段代码进行分析:

	public static void method1() {try {method2();}catch(Exception e) {System.out.println("failed");}}public static void method2() throws FileNotFoundException{File f = new File("1.txt");System.out.println("试图打开文件");new FileInputStream(f);System.out.println("打开文件成功");}public static void main(String[] args) {// TODO Auto-generated method stubmethod1();		}

根据上面的代码,在定义method2时,通过throws指明该方法可能会抛出FileNotFoundException异常。首先main函数调用method1,method1调用method2,而method2中文件f并不存在,因此在new FileInputStream(f)这行代码抛出异常,method2终止,并把这个抛出的异常甩锅给method1 。而此时,method1刚好可以catch住这个异常,异常就被处理掉了,得到的结果如下:
在这里插入图片描述

throw

与throws不同,throw是一定会抛出一个异常,而且是在方法体内部使用。之前所说的异常类对象,都是JVM自动进行实例化的;有时候用户想要亲自实例化异常类对象,那么这个时候throw就登场了。先看一段代码:

	public static void main(String[] args) {// TODO Auto-generated method stubtry {throw new FileNotFoundException();}catch(Throwable e){System.out.println("File not found");}}

该代码比较简单,在catch中通过throw,直接实例化了一个异常类FileNotFoundException的对象,通过catch接住,并进行输出,得到的结果如下:
在这里插入图片描述

总结

Throwable是所有异常类的超类,Exception和Error两个类直接继承它;

throws写在方法声明的后面,表明这个方法可能会抛出某种异常;

throw写在方法体内部,手动抛出一个异常。


http://chatgpt.dhexx.cn/article/DCF1NW3E.shtml

相关文章

Java throws 使用

在开发中,如果去调用别人写的方法时,是否能知道别人写的方法是否会发生异常?这是很难判断的。针对这种情况,Java总允许在方法的后面使用throws关键字对外声明该方法有可能发生异常,这样调用者在调用方法时,…

【JavaSE】throws 异常处理

文章目录 1. 基本介绍2. 快速入门案例3. 注意事项和使用细节 1. 基本介绍 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由…

throws异常

在程序开发过程中,程序员会尽量避免错误的发生,但是总会发生一些不可预测的事情,例如除法运算时除数为0 、内存不足、栈溢出等,这些就是异常,java语言提供了异常的处理机制,处理一些不可预期的事情。 使用t…

Elasticsearch之利用bulk提高写入性能(含源码分析)

什么是bulk操作 bulk是批量的意思,也就是把原来单个的操作打包好,通过批量的api提交到ES集群。下面是个示例: 单个操作: PUT my-index-000001/_doc/1 {"timestamp": "2099-11-15T13:12:00","message&…

.NET5必备工具——EF大数据批量处理----Bulk系列

之前做项目的时候,如果在大批量操作数据时,性能不好.因为在框架中使用了EntityFramework,于是就搜索到某著名插件,Z系列。 1.安装 然后在类里面添加引用之后,使用DbContext就可以直接点出来。 2.博客园有人做过对比试验 我们直接拿数据说话吧. EF传统…

初识ElasticSearch(5) -批量操作之bulk | 条件查询 | 其它查询

1. bulk:1.1. bulk语法:1.2. bulk行为-增删改: 2. bulk-index批量插入:3. bulk-update批量修改:4. bulk-delete批量删除:5. _update_by_query条件更新:6. _delete_by_query条件删除:…

mysql bulkupdate_Bulk Upsert for MySQL PostgreSQL

什么是 Upsert "UPSERT" is a DBMS feature that allows a DML statements author to atomically either insert a row, or on the basis of the row already existing, UPDATE that existing row instead, while safely giving little to no further thought to con…

JPA 2.1: Bulk Update and Delete

为什么80%的码农都做不了架构师?>>> JPA 2.1: Bulk Update and Delete In the JPA 2.0 and early version, if you want to execute a bulk updating query, you have to use update or delete clause in JPQL directly. JPA 2.1 introduce new Criteri…

ElasticSearch提供的bulk update性能对比

目的:为了对比update的数据中重复数据对性能的影响。

Java面试智力题逻辑题汇总2021

rand5()能够生成0-4的随机数 rand7()能够生成0-6的随机数 已知rand7()生成rand5() 已知rand5()生成rand7()

面试智力题精选:扑克牌问题

袁方同学在玩扑克牌。这幅扑克牌比较特别,没有花色,只有点数。每张牌的点数是1,2,3,...,20。一共20张牌。袁方把牌洗了很多遍以后,把所有牌正面朝下垒成一堆放在自己手上。他翻第一张牌,发现是1…

大厂面试常见智力题

1. 64匹马,8个赛道,找出前4名最少比赛多少场? 这是一道经常考的智力题 64匹马,我们要想知道哪匹🐎跑的最快,前提条件是每一匹🐎都要去比赛一场。所以刚开始的赛马规则是每匹马都要进行一次比赛。 步骤1: 把 64匹🐎…

盘点面试中常见的智力题

由于某些不可抗力,几篇文章做了删除,重新上架,希望于你有益。 面试为何会出现智力题? 可能是为了考察应聘者的综合分析能力、逻辑思维能力、反应能力和解决问题能力吧~ 也可能是...... “我去!这面试者能力可以啊&…

面试中常见的智力题

文章目录 一、提灯过桥问题?二、有两个鸡蛋,如何最快的试出100层楼中刚好那一层扔下鸡蛋会碎?三、在地球什么地方能够,往南走1公里,然后往东走1公里,再往北走1公里能回到原点?四、一块N x M的巧…

面试中常见智力题汇总

面试中常见智力题汇总 1. 二进制问题1.1 毒药问题1.2 分金块问题 2. 先手必胜问题2.1 抢 30的必胜策略2.2 100本书,每次能够拿1~5本,怎么拿能保证最后一次是你拿?2.3 轮流拿石子 3. 推理题3.1 掰巧克力问题3.2 辩论赛问题3.3 在24小时里面时针…

2020秋招华为笔试题-买钉子

1.题目描述 2.代码实现 主要思路&#xff1a;类似零钱兑换 #include <iostream> #include <vector> using namespace std;class Solution { public:int buyNails(vector<int>& nails, int count) {vector<int> dp(count1, -1);dp[0] 0;for(int …

华为2022硬件逻辑笔试题

单选题&#xff08;每题两分&#xff09; 1.以下关于过程赋值的描述&#xff0c;不正确的是&#xff08;&#xff09; A在非阻塞性过程赋值中&#xff0c;使用赋值符号“< ” B赋值操作符是“”的过程赋值是阻塞性过程赋值 C在非阻塞性过程赋值中&#xff0c;对目标的赋…

AJAX原理快速入门

AJAX的原理 Ajax 的原理简单来说通过 XmlHttpRequest 对象来向服务器发异步请求&#xff0c;从服务器获得数据&#xff0c;然后用 javascript 来操作 DOM 而更新页面的局部显示。 Ajax 的优点&#xff1a; 1.最大的一点是页面无刷新&#xff0c;给用户的体验非常好。 2.使用异…

Ajax详解~及原理刨析

目录 什么是Ajax 同步和异步 Ajax如何实现异步和局部刷新 Ajax工作原理 Ajax工作流程 1、创建XMLHttpRequest对象 2、创建HTTP请求 3、向服务器发送数据 4、设置回调函数 &#xff0c;在回调函数中针对不同的响应状态进行处理 完整实例 Jquery中的ajax 什么是Ajax…

和vue相似的ajax原理及vue中运用ajax

和vue相似的ajax原理及vue中运用ajax。 一&#xff0c;默认的app.vue/文件 App.vue     App.vue是项目的主组件&#xff0c;页面入口文件 &#xff0c;所有页面都在App.vue下进行切换&#xff0c;app.vue负责构建定义及页面组件归集。                二&…