Java Exception - 使用throws声明抛出异常

43 篇文章 2 订阅
订阅专栏

使用throws声明抛出异常的思路是,当前方法不知道如何处理这种类型的异常,该异常应该由上一级调用者处理;如果main方法也不知道如何处理这种类型的异常,也可以使用throws声明抛出异常,该异常将交给JVM处理。JVM对异常的处理方法是,打印异常的跟踪栈信息,并中止程序运行。

throws声明抛出只能在方法签名中使用,throws可以声明抛出多个异常类,多个异常类之间以逗号隔开。一旦使用throws语句声明抛出该异常,程序就无须使用try…catch块来捕获该异常了。

@Slf4j
public class ExceptionTest {
    public static void main(String[] args) throws FileNotFoundException {
        FileInputStream fileInputStream = new FileInputStream("a.txt");
    }
}

上面程序声明不处理IOException异常,将该异常交给JVM处理,所以程序一旦遇到该异常,JVM就会打印该异常的跟踪栈信息,并结束程序。
在这里插入图片描述
如果某段代码中调用了一个带throws声明的方法,该方法声明抛出了Checked异常,则表明该方法希望它的调用者来处理该异常。也就是说,调用该方法时要么放在try块中显式捕获该异常,要么放在另一个带throws声明抛出的方法中。

FileInputStream的构造方法 :

public FileInputStream(String name) throws FileNotFoundException {
    this(name != null ? new File(name) : null);
}
@Slf4j
public class ExceptionTest {
    public static void main(String[] args) throws FileNotFoundException {
        // 因为test()方法抛出了FileNotFoundException异常
        // 所以调用test()方法的代码要么位于try...catch块中
        // 要么处于另一个待throws声明抛出的方法中
        test();
    }
    private static void test() throws FileNotFoundException {
        // 因为FileInputStream的构造方法抛出了FileNotFoundException异常,即编译时异常
        // 所以调用FileInputStream构造方法的代码要么位于try...catch块中
        // 要么处于另一个待throws声明抛出的方法中
        FileInputStream fileInputStream = new FileInputStream("a.txt");
    }
}

使用throws声明抛出异常时有一个限制,就是方法重写时“两小”中的一条规则:子类方法声明抛出的异常类型应该是父类方法声明抛出的异常类型的子类或相同,子类方法声明抛出的异常不允许比父类方法声明抛出的异常多。

@Slf4j
public class ExceptionTest {
    public void test() throws FileNotFoundException {
        FileInputStream fileInputStream = new FileInputStream("a.txt");
    }
}
public class SubClass extends ExceptionTest {
    @Override
    public void test() throws Exception {
        super.test();
    }
}

SubClass子类中的test()方法声明抛出Exception,该Exception是其父类声明抛出异常FileNotFoundException类的父类,这将导致程序无法通过编译。
在这里插入图片描述
由此可见,使用Checked异常至少存在如下两大不便之处:

  • 对于程序中的Checked异常,Java要求必须显式捕获并处理该异常,或者显式声明抛出该异常。这样就增加了编程复杂度。
  • 如果在方法中显式声明抛出Checked异常,将会导致方法签名与异常耦合,如果该方法是重写父类的方法,则该方法抛出的异常还会受到被重写方法所抛出异常的限制。

在大部分情况下,推荐使用Runtime异常,而不使用Checked异常。尤其当程序需要自行抛出异常时,使用Runtime异常将更加简洁。

当使用Runtime异常时,程序无须在方法中声明抛出Checked异常,一旦发生了自定义错误,程序只管抛出Runtime异常即可。如果程序需要在合适的地方捕获异常并对异常进行处理,则一样可以使用try…catch块来捕获Runtime异常。

Java异常处理--throw手动抛出异常对象
人生得意须尽欢
01-17 4452
Java异常处理--throw手动抛出异常对象
浅析java异常处理机制—中级篇
区块链领域填坑的java程序猿
10-18 1601
上一篇我们说到异常处理机制有:捕获异常和抛出异常。下面我们就详细介绍一下。捕获异常(try、catch 和 finally)处理流程: 1)当try没有捕获到异常时:try语句块中的语句逐一被执行,程序将跳过catch语句块,执行finally语句块和其后的语句; 2)当try捕获到异常,catch语句块里没有处理此异常的情况:当try语句块里的某条语句出现异常时,而没有处理此异常的catch语
Java 中 9 个处理 Exception 的最佳实践
shadow_zed的博客
07-04 358
Java中处理异常并不是一个简单的事情。不仅仅初学者很难理解,即使一些有经验的开发者也需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样处理等等。这也是绝大多数开发团队都会制定一些规则来规范对异常的处理的原因。而团队之间的这些规范往往是截然不同的。本文给出几个被很多团队使用的异常处理最佳实践。1. 在Finally块中清理资源或者使用try-with-resource语句当使用类似I...
Java异常处理- 抛出异常
最新发布
Flying_Fish_roe的博客
09-05 1297
抛出异常Java中一种处理错误的机制。当发生异常时,程序可以选择抛出异常来终止当前的执行流,并交由上层调用者或异常处理器来处理。以下是一些关键点和总结:异常的类层次结构:Java中的异常分类分为可检查异常(checked exception)和运行时异常(runtime exception)。检查异常:这些异常在编译时必须被捕获或声明抛出,否则编译会报错。常见的可检查异常包括IOException、SQLException等。运行时异常:这些异常不需要显示地捕获或声明抛出。
Javathrows Exception
热门推荐
hanxiaoyong_的博客
04-21 7万+
转:https://www.cnblogs.com/feichengwulai/articles/3793261.html 1、(终极解释!!!)throwsException放在方法后边,是throwsException表示的是本方法不处理异常,交给被调用处处理(如果你不希望异常层层往上抛,你就要用throws Exception),而且被调用处必须处理。 2、throw new Exce...
JAVA Exception异常总结(JAVA Exception面试笔试总结)
漫步
12-18 2921
这方面主要有以下几种类型的题目: 1 try中throw一个exception,能否直接catch? public void method1(){ try{ throw new StringIndexOutOfBoundsException("method1 catch"); }catch(Exception e){ System.out.println(e.getMes
Javathrows Exception使用
Pei_hua100的专栏
06-08 1684
1、(终极解释!!!)throwsException放在方法后边,是throwsException表示的是本方法不处理异常,交给被调用处处理(如果你不希望异常层层往上抛,你就要用throws Exception),而且被调用处必须处理。 2、throw new Exception表示人为的抛出一个异常,例如: publicbooleaninsert(Newsn){ try{ ..... }catch{ thrownewException("这是我自己抛出的一个异常,如果我看到此段信息表示...
Java异常处理-throw手动抛出异常对象
01-17
如果手动抛出的是编译时异常,即非运行时异常,需要在方法签名中使用throws声明,或者使用try...catch进行处理,否则编译不通过。 3. 如果手动抛出的是运行时异常,编译器不会强制要求处理,但最好还是能捕获并处理...
Java编程中使用throw关键字抛出异常的用法简介
09-03
`throw`关键字是Java中用于手动抛出异常的关键字,通常在检测到某个条件不符合预期或者需要提供特定错误信息时使用。以下是对`throw`关键字使用的一些详细解释和示例。 ### 抛出异常的基本语法 在Java中,`throw`...
java 抛出异常处理的方法
08-29
在上面的例子中,pop() 方法可能抛出 NegativeArraySizeException 异常,因此在方法声明使用 throws 关键字指明可能抛出的异常。在主方法中调用 pop() 方法时,如果发生异常,就会将异常抛给 catch 语句,并输出...
(完整版)Java程序设计任务驱动式教程-任务十四-主动出击(抛出异常).ppt
10-23
例如,可以声明`public static boolean isId(String id) throws Exception`,表明这个方法可能抛出`Exception`。 ```java public static boolean isId(String id) throws Exception { // 方法体,可能会抛出异常 }...
java throws exception
crazy java
08-29 456
之前很少这样写,所以对这方面的体验很少。现在自己证实了一把,确认throws exception之后,不会有任何的返回。这个感觉有点异样,惭愧,惭愧!!程序直接中断!验证的代码如下: public class ThrowsException { public String devideByZero() throws Exception { try { int i = 1 ...
Java语言-ThrowsException.java
程序员本员
05-19 244
public class ThrowsException { static void Example(int keg) throws ArithmeticException,ArrayIndexOutOfBoundsException{ System.out.println("---In KegDepartment "+keg+"---"); if(keg==10) { System.out.println("no Exception caught"); return; } e
java_异常捕获throws exception
xuchaoxin1375的博客
11-01 959
package study.try_catch; import java.io.UnsupportedEncodingException; import java.util.Arrays; public class TryCatchMain { /*如果不想写任何try代码,可以直接把main()方法定义为throws Exception}{方法体写在里头}: * 区别于try..catch环绕处理: * 因为main()方法声明了可能抛出Exception,也就声明了可能抛
java的异常处理简单说明之————throws exception
gmo的博客
08-25 7388
Java 中异常的处理 throws Exception放在方法后边,表示的是本方法不处理异常,交给被调用处处理(如果你不希望异常层层往上抛,你就要用throws Exception) ,而且被调用处必须处理,即:人为地抛出一个异常。 代码示例1: public boolean insert(News n) { try{ ..... }catch{ throw new Exception("这是我自己抛出的一个异常,如果我看到此段信息表示我这个方法这儿出错了,并且我能自己看到。"); }finally{ }
Java基础-异常-throws Exception-抛声明
p15097962069的博客
12-21 115
Java基础-异常-throws Exception-抛声明
throwthrows区别
winie
01-05 1217
这两者虽然看起来只有一个s的区别,但是作用完全不一样 /////java处理异常方式/////////////////////////////// 在java代码中如果发生异常的话,jvm会抛出异常对象,导致程序代码中断,这个时候jvm在做的操作就是:创建异常对象,然后抛出,比如: int i= 1; int j = 0; int res = 0; res = i/j;//除0错误...
java代码throws异常
weixin_34208185的博客
11-13 123
总结:抛出异常 package com.ds; //异常捕获 public class fdsg { private static void throwException() { try { String a = null; if (a == null) { throw new NullPointerException("s is null"...
Java中的异常(Exception
AAAAA_9的博客
11-25 2157
Java中的异常Exception,分为编译时异常和运行时异常
练习-java异常处理之throws之抛出并捕获异常
06-28
对于throws抛出的异常,调用方可以选择使用try-catch块进行捕获处理,或者也可以继续使用throws将异常抛给更上层的调用者处理。如: ```java public void read() throws IOException { try { readFile(); } ...
写文章

热门文章

  • 【MATLAB】基本绘图函数(涵盖所有基本绘图指令) 120014
  • 【MATLAB】contour函数的使用(绘制等高线的深入讲解) 66743
  • Docker镜像拉取报错:Error response from daemon: Get https://registry-1.docker.io/v2/ 65202
  • Git 报错 error: pathspec ‘XXX‘ did not match any file(s) known to git 报错解决方法 50410
  • 【MATLAB】matlab求矩阵的逆矩阵2种方式 49048

分类专栏

  • 【分布式-消息队列Kafka】 16篇
  • 【云原生-Kubernetes】 1篇
  • 【分布式-服务器Zookeeper】
  • 【分布式-服务器Nginx】 17篇
  • 【分布式-缓存Redis】
  • 【分布式-服务调用】 3篇
  • 【实战项目总结】 87篇
  • 【文件上传和下载】 11篇
  • 【Leetcode-算法】 86篇
  • 【Linux-操作系统】 26篇
  • 【中间件-Redis】 28篇
  • 【中间件-Kafka】 40篇
  • 【中间件-ElasticSearch】 64篇
  • 【中间件-Rabbitmq】 2篇
  • 【框架-Jaskson】 16篇
  • 【框架-Shiro】 6篇
  • 【框架-Mybatis】 5篇
  • 【框架-SpringCloud】 19篇
  • 【框架-SpringSecurity】 42篇
  • 【框架-SpringBoot】 20篇
  • 【框架-Spring】 19篇
  • 【数据库-ClickHouse】 2篇
  • 【数据库-MongoDB】 21篇
  • 【数据库-MySQL进阶】 50篇
  • 【Java-8新特性】 10篇
  • 【Java-并发编程】 70篇
  • 【Java-Jvm虚拟机】 30篇
  • 【Java-设计模式】 41篇
  • 【Java-语言进阶】 43篇
  • 【踩坑日常总结】 47篇
  • 【杂文备忘录】 27篇
  • 【Postman-测试工具】 5篇
  • 【Git-代码管理工具】 31篇
  • 【Docker-容器化技术】 6篇
  • 【IDEA-代码编辑工具】 17篇
  • 【Maven-项目管理工具】 17篇
  • 【基础学习-项目实战】 54篇
  • 【基础学习-Python】 2篇
  • 【基础学习-MyBatis】 30篇
  • 【基础学习-SpringMvc】 38篇
  • 【基础学习-Spring】 69篇
  • 【基础学习-MySQL】 58篇
  • 【基础学习-JavaWeb/前端】 105篇
  • 【基础学习-数据结构和算法】 56篇
  • 【基础学习-Java语言】 62篇
  • 【计算机网络】 14篇
  • 【Matlab-编程与论文】 43篇

最新评论

  • 【论文】时差测量的定位精度GDOP分析(一)

    2201_75986890: 是参考观测站(主站)

  • SpringSecurity Oauth2 - 访问令牌续期

    CSDN-Ada助手: 推荐 Java 技能树:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • 分布式 - 消息队列Kafka:项目中kafka配置文件和命令行操作

    艾思科蓝 AiScholar: 您好,有兴趣谈一下推广宣传合作吗~方便的话私信我~

  • 【论文】时差测量的定位精度GDOP分析(一)

    z885766: 时间吧

  • Java8 - Optional 处理可能为空值的容器类

    普通网友: 干货满满,实用性强,博主的写作风格简洁明了,让人一目了然。文章涵盖了很多实用的知识点。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

大家在看

  • C++——继承 1721
  • ssm基于互联网的音乐电影分享系统的设计与实现+vue
  • 服务器的介绍 786
  • 华为云购买弹性云服务器(教程)
  • 【MySQL】提高篇—视图与存储过程:存储过程(Procedure)的创建与调用 172

最新文章

  • SpringSecurity Oauth2 - 访问令牌续期
  • SpringSecurity Oauth2 - 密码认证获取访问令牌源码分析
  • SpringSecurity Oauth2 -密码模式完成身份认证 [自定义AuthenticationProvider]
2024年20篇
2023年100篇
2022年424篇
2021年98篇
2020年272篇
2019年526篇

目录

目录

分类专栏

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我一直在流浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家安宁设计玻璃钢雕塑贵不贵广东玻璃钢雕塑厂家哪里最便宜玻璃钢雕塑品牌惠新复材泸州玻璃钢雕塑摆件施工服务茂名玻璃钢狗雕塑四川开业商场美陈价钱昌江黎族自治县玻璃钢飞马雕塑汕尾玻璃钢雕塑分类六安商场圣诞美陈玻璃钢公园雕塑制作湖南标牌标识玻璃钢仿铜雕塑上海大型商场美陈供应商马鞍山欧式玻璃钢雕塑定制绍兴耐高温玻璃钢雕塑摆件气球美陈商场新年芒市玻璃钢雕塑公司福建环保玻璃钢雕塑联系方式河北大型主题商场美陈售价专业的玻璃钢奶牛雕塑榆林卡通玻璃钢雕塑定制铜陵商场周年美陈南阳公园水景玻璃钢人物雕塑厂家玻璃钢雕塑厂哪家专业农安玻璃钢雕塑工程产品介绍呼和浩特小区玻璃钢雕塑公司安宁加工玻璃钢雕塑贵不贵德州锻铜玻璃钢卡通雕塑衢州定制玻璃钢雕塑销售电话邯郸标识标牌玻璃钢仿铜雕塑郑州玻璃钢动物雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化