每日英文
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等混合使用注意代码执行顺序。不是不可以,而是越是厉害的人,代码越容易理解。





