理解Java里面的必检异常和非必检异常
问题:理解Java里面的必检异常和非必检异常
Joshua Bloch在"Effective Java"里面说过
在可恢复的条件下和编程错误导致的运行时错误时,使用必检异常(第二版的第52页)
让我们来看一下我对这个的正确理解吧
下面是我对必检异常的理解
try{String userInput = //read in user inputLong id = Long.parseLong(userInput);
}catch(NumberFormatException e){id = 0; //通过设置ID为0,来恢复这种情况
}
1.上面的代码是否能被看作必检异常
2.运行时异常是一个非必检异常吗?
下面是我对非必检异常的一些理解
try{File file = new File("my/file/path");FileInputStream fis = new FileInputStream(file);
}catch(FileNotFoundException e){//3. 这里我应该干什么//我应该 "throw new FileNotFoundException("File not found");"?//应该写日志吗?//或者应该 System.exit(0);?
}
- 现在看来,上面的代码也不可能是一个必检的异常了?我可以尝试像这样恢复吗?(注意:我的第三个问题在上面代码的catch那里)
try{String filePath = //read in from user input file pathFile file = new File(filePath);FileInputStream fis = new FileInputStream(file);
}catch(FileNotFoundException e){//友好地提升用户一个错误信息//以某种方式要求用户重新输入路径
}
- 为什么我们需要这样做?
public void someMethod throws Exception{}
为什么要把这个异常抛出?直接处理不是更快更好吗?
6.我应该直接抛出确切的异常还是使用Exception去覆盖掉他
回答一
是不是必检异常和你是否捕捉和你在捕获异常的代码块里面干了什么无关。它是异常类的一种属性。任何异常都是Exception类的一个子类(除了运行时异常)并且它的子类都是必检异常
Java的编译器强制要求你捕获异常或者在方法签名那个声明。它们可以用来提高程序的安全性,但是大部分人认为它不会带来程序设计上的问题
为什么要把这个异常抛出?直接处理不是更快更好吗?
因为这是异常的完整内容。如果没有这种可能性,你就不需要这些异常了。它们能够让你在你选择的层级去处理异常,而不是强制让你在异常发生的底层级的方法里处理这些异常
文章翻译自Stack Overflow:https://stackoverflow.com/questions/6115896/understanding-checked-vs-unchecked-exceptions-in-java
理解Java里面的必检异常和非必检异常相关推荐
- java授查 非授查异常_java检查异常与非检查异常
Java的可检测异常和非检测异常泾渭分明.可检测异常经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则. 非检测异常不遵循处理或声明规则.在产生此类异常时,不一定非要采取任何适当 ...
- JAVA可检测异常和非检测异常
JAVA可检测异常和非检测异常 参考文章: (1)JAVA可检测异常和非检测异常 (2)https://www.cnblogs.com/meimei00/p/6473767.html 备忘一下.
- Java检查异常、非检查异常、运行时异常、非运行时异常的区别
Java检查异常.非检查异常.运行时异常.非运行时异常的区别 参考文章: (1)Java检查异常.非检查异常.运行时异常.非运行时异常的区别 (2)https://www.cnblogs.com/ou ...
- JAVA受检异常和非受检异常举例
受检异常和非受检异常(运行时异常)举例 RuntimeException(即非受检异常): RuntimeException在默认情况下会得到自动处理,所以通常用不着捕获RuntimeExceptio ...
- [java]01受检异常和非受检异常的区别
1.什么是非受检异常? 非受检异常指的是java.lang.RuntimeException和java.lang.Error类及其子类: 2.什么是受检异常? 除了非受检异常之外的异常属于受检异常: ...
- 检查异常和非检查异常 有空你去学一下检查异常和非检查异常
https://blog.csdn.net/weixin_39220472/article/details/81056647 Java检查异常和非检查异常,运行时异常和非运行时异常的区别 灰太狼_cx ...
- 强制性异常和非强制性异常
java的异常处理机制是一项相当灵活的技术.也是java的特色.项目做的够不够出色,很大一部分取决于异常的处理.如何自定义异常,是该try catch还是该throws,这些都是我们该注意的方面. j ...
- Java-受检异常与非受检异常
Java-受检异常与非受检异常 Java-受检异常与非受检异常 受检异常 非受检异常 java中的异常 Java-受检异常与非受检异常 受检异常 受检异常其实表示的是在编译的时候,要强制检查的异常,这 ...
- java 受检异常和非受检异常
总是记不住什么是受检异常,什么是非受检异常,有时甚至弄混淆,特此简单记录以便复习之用. 异常的分类: java.lang.Throwable 1.Error错误:JVM内部的严重问题.无法恢复.程序人 ...
最新文章
- 专访 | 商汤HPC负责人刘文志(风辰):未来战略的两大方向及招人的4个标准
- 翻译:MariaDB RENAME TABLE语句
- 《笑傲网湖》第三回 三层交换
- 2月28日云栖精选夜读 | 阿里云率先达成国家绿色数据中心标准,平均PUE低于1.3...
- Hello Blazor:(2)集成Tailwind CSS续——nuget包方式
- 获取某一列_Excel VBA 8.2 获取多列唯一值,不用肉眼,VBA帮你快速搞定
- 关于MPLS静态 LSP建立的问题——针对上题的另一种解法
- Objective-C学习笔记(十八)——对象方法和类方法的声明,定义及调用
- redux-chunk中间件的安装和使用-(二)
- Python实现坦克大战——源代码
- 数据结构1800题-错题集-第六章
- MTK平台sip信令的查看和volte的故障
- apache服务器(修改主页文件、两个不同ip访问不同站点、统一ip不同端口访问不同站点)
- 金博科技果园分销商城系统APP定制开发
- sqlMap embedded=iSinta.Beiwo.Infrastructure.Mappers.Member.MemberAddress.xml, iSinta.Beiwo.Inf
- 比较好的业界新闻网站
- 其他计算机如何联网,局域网怎么连接其他电脑上网
- less使用语法详解
- [系统安全] 三十三.恶意代码检测(3)基于机器学习的恶意代码检测技术
- new IntersectionObserver 使用笔记