暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Exception和Error有什么区别?在使用中应该注意什么?

魏卯卯 2018-05-21
248



每日英文

    If you saw the darkness in front of you, don't be afraid, that's because sunshine is at your back. 

如果你看到面前的阴影,别怕,那是因为你的背后有阳光。

卯卯有话说
    凡事都有正反两面,遇到困难和挫折不要害怕,要努力让自己从阴影中挣脱出来!因为我们背后的人在支持着我们,所以静下心来一定能找到解决的办法哦~当我们感到难过与茫然的时候,想想曾经快乐的事情,想想那些支持你的人,给自己打打气哦!

整体描述

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


分别来讲:

Error:是指在正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序(比如jvm自身)处于非正常、不可恢复的状态。常见的比如:OutOfMemoryError之类,都是Error的子类。


Exception:分为可检查(checked)异常和不检查(unchecked)异常,他们的区别在于:检查性异常必须使用try catch或者throws等关键字进行处理,否则编译器会报错;非检查性异常一般是程序代码写的不够严谨而导致的问题,可以通过修改代码来规避。


常见的不检查(unchecked)异常也称作运行时异常有:

空指针异常(NullPointerException)、除零异常(ArithmeticException)、数组越界异常(ArrayIndexOutOfBoundsException)等


常见的检查(checked)异常有:

输入输出异常(IOException)、文件不存在异常(FileNotFoundException)SQL语句异常(SQLException)等。




思考


Error中的NoClassDefFoundError与ClassNotFoundException有什么区别?


答:

NoClassDefFoundError 是程序在编译时候可以顺利找到所需要依赖的类的,但是在运行时依赖的类找不到或者可以找到多个,就会抛出这个Error。ClassNotFoundException在类路径错误,或者类名称发生更改,都会导致这个Exception,这两个异常的出现在生产环境中,通常是由于依赖jar包多版本存在,jar包升级中类或者方法不再提供引起的。


举例:

ClassNotFoundException:

通过:Class cl = Class.forName("类路径");加载一个类,

如果类不存在就会抛出ClassNotFoundException


NoClassDefFoundError:

程序运行时删除一个class的编译文件,程序在调用过程中就会报出:NoClassDefFoundError

亦或者导入多个不同版本的相同jar包也会导致这种问题。


异常处理的注意事项


   try-catch 代码段会产生额外的性能开销,或者换个角度说,它往往会影响 JVM 对代码进行优化,所以建议仅捕获有必要的代码段,尽量不要一个大的 try 包住整段的代码;与此同时,利用异常控制代码流程,也不是一个好主意,远比我们通常意义上的条件语句(if/else、switch)要低效。

  继承某个异常时,重写方法时,要么不抛出异常,要么抛出一模一样的异常。

  当一个try后跟了很多个catch时,必须先捕获小的异常再捕获大的异常。

  假如一个异常发生了,控制台打印了许多行信息,是因为程序中进行多层方法调用造成的。关键是看类型和行号。

  上传下载不能抛异常。上传下载一定要关流。

  异常不是错误。异常控制代码流程不利于代码简单易读。

   try catch finally执行流程,与 return,break,continue等混合使用注意代码执行顺序。不是不可以,而是越是厉害的人,代码越容易理解。



文章转载自魏卯卯,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论