时间:2021-05-19
写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该不该被捕获了!
本人学识尚浅,写文目的是为了得到大家指点。倘若文章帮到了您,那真是好极了。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
以java为例,其exception和error的区别如下: 1、Exception和Error都继承了Throwable类,在java中只有Throwabl
详解Java中多线程异常捕获Runnable的实现1、背景:Java多线程异常不向主线程抛,自己处理,外部捕获不了异常。所以要实现主线程对子线程异常的捕获。2、
一、问题在txt文本中复制代码进入IDEA报错Error:(1,1)java:非法字符:‘\ufeff'Error:(1,10)java:需要class,int
PS:1.捕获PHP语法错误2.严重错误用正常的set_error_handle无法捕获此两类错误,这是捕获此类错误的技巧复制代码代码如下://test.php
现实生活中,开店都是要交纳各种税费的,那么有些人可能会有疑问,在淘宝上如果开店都是要交纳各种税费,那么到底该不该交税呢?那麽纳税的金额又该如何计算?淘宝商务商店