问题:理解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

理解Java里面的必检异常和非必检异常相关推荐

  1. java授查 非授查异常_java检查异常与非检查异常

    Java的可检测异常和非检测异常泾渭分明.可检测异常经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则. 非检测异常不遵循处理或声明规则.在产生此类异常时,不一定非要采取任何适当 ...

  2. JAVA可检测异常和非检测异常

    JAVA可检测异常和非检测异常 参考文章: (1)JAVA可检测异常和非检测异常 (2)https://www.cnblogs.com/meimei00/p/6473767.html 备忘一下.

  3. Java检查异常、非检查异常、运行时异常、非运行时异常的区别

    Java检查异常.非检查异常.运行时异常.非运行时异常的区别 参考文章: (1)Java检查异常.非检查异常.运行时异常.非运行时异常的区别 (2)https://www.cnblogs.com/ou ...

  4. JAVA受检异常和非受检异常举例

    受检异常和非受检异常(运行时异常)举例 RuntimeException(即非受检异常): RuntimeException在默认情况下会得到自动处理,所以通常用不着捕获RuntimeExceptio ...

  5. [java]01受检异常和非受检异常的区别

    1.什么是非受检异常? 非受检异常指的是java.lang.RuntimeException和java.lang.Error类及其子类: 2.什么是受检异常? 除了非受检异常之外的异常属于受检异常: ...

  6. 检查异常和非检查异常 有空你去学一下检查异常和非检查异常

    https://blog.csdn.net/weixin_39220472/article/details/81056647 Java检查异常和非检查异常,运行时异常和非运行时异常的区别 灰太狼_cx ...

  7. 强制性异常和非强制性异常

    java的异常处理机制是一项相当灵活的技术.也是java的特色.项目做的够不够出色,很大一部分取决于异常的处理.如何自定义异常,是该try catch还是该throws,这些都是我们该注意的方面. j ...

  8. Java-受检异常与非受检异常

    Java-受检异常与非受检异常 Java-受检异常与非受检异常 受检异常 非受检异常 java中的异常 Java-受检异常与非受检异常 受检异常 受检异常其实表示的是在编译的时候,要强制检查的异常,这 ...

  9. java 受检异常和非受检异常

    总是记不住什么是受检异常,什么是非受检异常,有时甚至弄混淆,特此简单记录以便复习之用. 异常的分类: java.lang.Throwable 1.Error错误:JVM内部的严重问题.无法恢复.程序人 ...

最新文章

  1. session的使用
  2. SpringCloud 应用在 Kubernetes 上的最佳实践 —— 开发篇
  3. WHYZOJ-#60 工资(二分)
  4. Hello world开始
  5. android webviewclient 点击事件,Android Api WebViewClient 详细解析
  6. 常用概率论矩阵论公式
  7. C++:定义头文件/定义命名空间
  8. VMware 软件被曝其史上最严重的信息泄露漏洞之一,影响大量虚拟机和主机
  9. caffe dataset
  10. 例4.1 特殊乘法 - 九度教程第39题(数位拆解)
  11. 进程调度算法Java
  12. 面向对象设计与构造课程作业 _第三单元总结 _北京航空航天大学计算机学院 2019春季...
  13. 信息安全意识主题分享-数据安全
  14. 简易猜数1~100数字小游戏ovo
  15. 微信小程序 - 修改 button 边框和背景色
  16. 钟平程序员逻辑英语——回归理性——中英文对切基本公式(1-1)
  17. [转]手机游戏六大渠道评测标准大合集
  18. IDEA(或Android Studio)推送(push)代码报错 unable to read askpass response from ‘C:\Users\Urasaki\AppData\Loc
  19. AI 作画领域中的“神笔马良”是怎样炼成的?
  20. Python时间24小时制和12小时制转换

热门文章

  1. Linux pause函数 详解
  2. C语言实现文件类型统计函数
  3. java环境变量的配置与详解,这些知识你必须拿下
  4. 美团Android开发工程师岗位职能要求,真香
  5. 算法题+JVM+自定义View,隔壁都馋哭了
  6. Java构造函数的深入理解
  7. Linux下查看txt文档
  8. java 泛型的几点备忘
  9. ABAP中创建动态内表的三种方法(转载)
  10. How to remove replication in SyteLine V2