写java程序时,通常会被提示捕获异常,而又有一些异常是不需要强制捕获的,这是一个被说烂了的话题。像我一样从其他语言转过来的人确实有点迷惑,那我以我的理解重新解释一遍吧。

  异常的基类是Exception,Exception子类有RuntimeException和其它Exception。这些其它的Exception叫做Checked异常,RuntimeException叫做Unchecked异常。

  只看名字不太好理解,说的通俗点,java为了程序能够稳定的运行,就提示开发者捕获已知异常。编译器知道所有类型或方法可能抛出的异常,在你使用某种类型或方法时,编译器就会提示你捕获已知的异常。这些编译器已知的可能存在的异常就是Checked异常。例如你在关闭文件流时,IOException已经在close方法里写明可能抛出,那么编译器就提示你必须捕获异常。而RuntimeException异常在编译阶段是不知道的,只有运行阶段才能确定,比如3/0(3除以0)会报ArithmeticException异常。因为这个除数是运行阶段可以变化的,所以不提示捕获。这些RuntimeException就是Unchecked异常。

  总之java是尽可能的让程序稳定,知道的就提示你,不知道的就无能为力了。这样解释应该比较清晰了吧。

  下边要进入正题了。

  可能有些朋友在调试程序时遇到过这种情况,程序明明出现了异常,也catch(Exception e)了,却没有捕获到任何信息。原因无非有两个,1.异常所在的线程跟你捕获的线程不是同一个线程,2.程序抛出的不是Exception而是Error。Error跟Exception一样都继承自Throwable,是指不应该被捕获的严重错误。当时看到这个解释,我竟然傻逼到没想明白为什么不该捕获Error。因为出现Error的情况会造成程序直接无法运行,所以捕获了也没有任何意义。那我的问题又来了,如果不捕获,那程序出问题退出了,连log都看不见,我该怎么办?其实这个假设是不成立的,因为如果Error真的存在,你在开发环境就已经发现问题了,根本不可能发布到正式环境。

  唉,绕了一大圈搞了这么件傻逼事,所以不要再讨论Error该不该被捕获了!

  

java中的error该不该捕获的更多相关文章

  1. Java牛角尖【007】:Java中的Error能不能被Catch

      Java牛角尖[007]:Java中的Error能不能被Catch 网上看到很多朋友说Java中Error是无法Catch到的,而Java中定义的Error类型又很难测试到,那就估且以为确是如此吧 ...

  2. Java中的Error和Exception

    Exception和Error都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型. Excep ...

  3. 谈一谈Java中的Error和Exception

    Error和Exception的联系 继承结构:Error和Exception都是继承于Throwable,RuntimeException继承自Exception. Error和RuntimeExc ...

  4. 关于java中的“error: bad operand types for binary operator ”

    今天做这个题目的时候(142. O(1) Check Power of 2),遇到一个错误“ bad operand types for binary operator '&' ”. 先贴一下 ...

  5. java中exception和error有什么区别,运行时异常和一般异常有什么区别

    1.exception和error都是继承了throwable类,在java中只有throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型 2.ex ...

  6. java中error和exception的区别

    转自:https://www.jianshu.com/p/e8bbee3c1c4a Error类和Exception类的父类都是throwable类,他们的区别是: Error类一般是指与虚拟机相关的 ...

  7. Java中Error和Exception的异同以及运行时异常(Runtime exception)与检查型异常(checked exception)的区别

    一:Error和Exception的基本概念: 首先Exception和Error都是继承于Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕 ...

  8. java中Error与Exception有什么区别

    Error类和Exception类都继承自Throwable类. Error的继承关系: java.lang.Object  java.lang.Throwable      java.lang.Er ...

  9. java中的正则表达式捕获组与引用的概念

    今天群里有个人问,怎样用增则表达式匹配三角形的三边,其实只是要匹配三个数字而已,如 301 402 503 开始认为很简单,我就写了一个   "(([1-9]\\d?)\\s){2}$2&q ...

随机推荐

  1. bootsrtap带表格面板内容居中

    css中,添加 .table th, .table td { text-align: center; vertical-align: middle!important;}

  2. 【LG3233】[HNOI2014]世界树

    题面 洛谷 题解 代码 #include <iostream> #include <cstdio> #include <cstdlib> #include < ...

  3. wpf TabControl控件的SelectionChanged方法

    对于老手来说很简单,但是新手我从百度上找了好久没找到,最后还是去谷歌找到的,哎,万能的google. 前端界面: <TabControl Margin="0,10,0,0" ...

  4. DSP5509项目之用FFT识别钢琴音调(4)之麦克风输入和Line in输入

    1. 麦克风输入需要修改的内容,之前的版本是LINE IN的输入.实现功能,检测麦克风的输入,并且同时在耳机里面播放. #include <csl.h> #include <csl_ ...

  5. mongod 安装

    mongod --logpath F:\mongo\db\logs\logs.log --logappend --dbpath F:\mongo\db\data --directoryperdb -- ...

  6. Excel小技巧整理(持续更新)

    合并某列中相同单元格 参考https://jingyan.baidu.com/article/9158e00006db70a25512286f.html 使用方法 先给需要合并的列排序,这样相同数据会 ...

  7. 论文笔记:Visualizing and Understanding Convolutional Networks

    2014 ECCV 纽约大学 Matthew D. Zeiler, Rob Fergus 简单介绍(What) 提出了一种可视化的技巧,能够看到CNN中间层的特征功能和分类操作. 通过对这些可视化信息 ...

  8. TCP半开连接与半闭连接

    半打开(Half-Open)连接和半关闭(Half-Close)连接.TCP是一个全双工(Full-Duplex)协议,因此这里的半连接"半"字就是相对于全双工的"全&q ...

  9. 月薪45K的Python爬虫工程师告诉你爬虫应该怎么学,太详细了!

    想用Python做爬虫,而你却还不会Python的话,那么这些入门基础知识必不可少.很多小伙伴,特别是在学校的学生,接触到爬虫之后就感觉这个好厉害的样子,我要学.但是却完全不知道从何开始,很迷茫,学的 ...

  10. 第9次Scrum会议(10/21)【欢迎来怼】

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华小组照片 二.开会信息 时间:2017/10/21 17:20~17:45,总计25min.地点:东北师范 ...