理解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);?
}
  1. 现在看来,上面的代码也不可能是一个必检的异常了?我可以尝试像这样恢复吗?(注意:我的第三个问题在上面代码的catch那里)
try{String filePath = //read in from user input file pathFile file = new File(filePath);FileInputStream fis = new FileInputStream(file);   
}catch(FileNotFoundException e){//友好地提升用户一个错误信息//以某种方式要求用户重新输入路径
}
  1. 为什么我们需要这样做?
public void someMethod throws Exception{}

为什么要把这个异常抛出?直接处理不是更快更好吗?

6.我应该直接抛出确切的异常还是使用Exception去覆盖掉他

回答一

是不是必检异常和你是否捕捉和你在捕获异常的代码块里面干了什么无关。它是异常类的一种属性。任何异常都是Exception类的一个子类(除了运行时异常)并且它的子类都是必检异常

Java的编译器强制要求你捕获异常或者在方法签名那个声明。它们可以用来提高程序的安全性,但是大部分人认为它不会带来程序设计上的问题

为什么要把这个异常抛出?直接处理不是更快更好吗?

因为这是异常的完整内容。如果没有这种可能性,你就不需要这些异常了。它们能够让你在你选择的层级去处理异常,而不是强制让你在异常发生的底层级的方法里处理这些异常

文章翻译自Stack Overflow:https://stackoverflow.com/questions/6115896/understanding-checked-vs-unchecked-exceptions-in-java

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

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

相关文章

使用vim打开文件的16进制形式,编辑和全文替换

1、先用vim打开文件的二进制形式,如果不以二进制可能会产生转换错误。 vim -b file-to-open.dat 2、用xxd把文件转换成十六进制格式 :%!xxd 现在就可以对待普通文本一样查看和编辑二进制文件了。 3、vim 单文件替换方法 :%s/old/new/gc 全文执行替换,询问是…

nlp自然语言处理_不要被NLP Research淹没

nlp自然语言处理自然语言处理 (Natural Language Processing) 到底是怎么回事? (What is going on?) NLP is the new Computer VisionNLP是新的计算机视觉 With enormous amount go textual datasets available; giants like Google, Microsoft, Facebook etc have…

opencv 随笔

装环境好累,python3.6,opencv3.4 好不容易装好了,结果 addweight的时候总是报错 The operation is neither array op array (where arrays have the same size and the same number of channels), nor array op scalar, nor scalar op array …

js打开飞行模式_什么是飞行模式? 它有什么作用?什么时候应该打开它?

js打开飞行模式If youve flown on an airplane in the last decade and you have a smart phone, youve likely had to put that phone in airplane mode before the plane takes off.如果您在过去的十年中乘坐过飞机,并且拥有一部智能手机,那么您可能必…

在Java 里面怎么比较字符串

问题:在Java 里面怎么比较字符串 到目前为止,我使用 操作符去比较字符串在我的程序里面。然而,却产生了一个bug,将这个改为了.equals()以后,就把bug修复了 是不是太辣鸡了?它什么时候应该被使用或者说是不…

中小型研发团队架构实践三要点(转自原携程架构师张辉清)

如果你正好处在中小型研发团队…… 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少。中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速迭代以验证商业模式&#xf…

时间序列预测 预测时间段_应用时间序列预测:美国住宅

时间序列预测 预测时间段1.简介 (1. Introduction) During these COVID19 months housing sector is rebounding rapidly after a downtime since the early months of the year. New residential house construction was down to about 1 million in April. As of July 1.5 mi…

zabbix之web监控

Web monitoring(web监控)是用来监控Web程序的,可以监控到Web程序的下载速度,返回码以及响应时间,还支持把一组连续的Web动作作为一个整体进行监控。 1.Web监控的原理 Web监控即对HTTP服务的监控,模拟用户去访问网站,对…

如何使用Webpack在HTML,CSS和JavaScript之间共享变量

Earlier this week, I read an article explaining how CSS-in-JS slows down the rendering of some React apps and how static CSS is faster. But CSS-in-JS is very popular because, among other features, you can style dynamically using JavaScript variables.本周初…

Java中获得了方法名称的字符串,怎么样调用该方法

问题: Java中获得了方法名称的字符串,怎么样调用该方法 如果我有以下两个变量 Object obj; String methodName "getName";在不知道obj的类的情况下,我怎么样才能调用该类的名叫methodName的方法呢? 这个方法被调用时…

经验主义 保守主义_为什么我们需要行动主义-始终如此。

经验主义 保守主义It’s been almost three months since George Floyd was murdered and the mass protests. Three months since the nationwide protests, looting and riots across America.距离乔治弗洛伊德(George Floyd)被谋杀和大规模抗议活动已经快三个月了。 全国抗议…

Begin

Hello everyone, Finally,a technician from feiyang help me solve the question. Even though it is not the linux version i want.emmm...linux mint a new one i dont know about it And, lets make the life regular and delicate转载于:https://www.cnblogs.com/lxc-run…

redis介绍以及安装

一、redis介绍 redis是一个key-value存储系统。和Memcached类似,它支持存储的values类型相对更多,包括字符串、列表、哈希散列表、集合,有序集合。 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且…

java python算法_用Java,Python和C ++示例解释的搜索算法

java python算法什么是搜索算法? (What is a Search Algorithm?) This kind of algorithm looks at the problem of re-arranging an array of items in ascending order. The two most classical examples of that is the binary search and the merge sort algor…

Java中怎么把文本追加到已经存在的文件

Java中怎么把文本追加到已经存在的文件 我需要重复把文本追加到现有文件中。我应该怎么办? 回答一 你是想实现日志的目的吗?如果是的话,这里有几个库可供选择,最热门的两个就是Log4j 和 Logback了 Java 7 对于一次性的任务&a…

python机器学习预测_使用Python和机器学习预测未来的股市趋势

python机器学习预测Note from Towards Data Science’s editors: While we allow independent authors to publish articles in accordance with our rules and guidelines, we do not endorse each author’s contribution. You should not rely on an author’s works withou…

线程系列3--Java线程同步通信技术

上一篇文章我们讲解了线程间的互斥技术,使用关键字synchronize来实现线程间的互斥技术。根据不同的业务情况,我们可以选择某一种互斥的方法来实现线程间的互斥调用。例如:自定义对象实现互斥(synchronize("自定义对象")…

Python数据结构之四——set(集合)

Python版本:3.6.2 操作系统:Windows 作者:SmallWZQ 经过几天的回顾和学习,我终于把Python 3.x中的基础知识介绍好啦。下面将要继续什么呢?让我想想先~~~嗯,还是先整理一下近期有关Python基础知识的随笔吧…

volatile关键字有什么用

问题:volatile关键字有什么用 在工作的时候,我碰到了volatile关键字。但是我不是非常了解它。我发现了这个解释 这篇文章已经解释了问题中的关键字的细节了,你们曾经用过它吗或者见过正确使用这个关键字的样例 回答 Java中同步的实现大多是…

knn 机器学习_机器学习:通过预测意大利葡萄酒的品种来观察KNN的工作方式

knn 机器学习Introduction介绍 For this article, I’d like to introduce you to KNN with a practical example.对于本文,我想通过一个实际的例子向您介绍KNN。 I will consider one of my project that you can find in my GitHub profile. For this project, …