先来看看这张关于java异常的图

所有异常的祖先:Throwable
Throwable的子类:Etrror 和Exception
Error:是程序无法处理的错误,大多数与代码编写无关,错误不可查(JVM运行错误,outofmemoryerror,stackoverflowerror/类定义错误)
Exception:是程序本身可以处理的异常,其中重要的子类有:RunTimeException:有ArithmeticException, NullPointerException,NumberFormatException,ArrayIndexOutOfBoundsException。这些异常不受检查,可以捕获处理,或者你可以不处理,应该从逻辑层面尽可能的避免。其他子类:IOException,SQLException,ClassNotFoundException,属于非运行时异常,必须trycatch捕获。
其他概念:
可检查异常:Exception中除去RunTimeException及其子类
不可检查异常:RunTimeException及其子类 + Error
throw和throws的区别:
throw关键字是在程序中明确的抛出异常;throws用来表明方法不能处理的异常,多个异常用逗号隔开。
try catch
1,try后面必须要有catch或者finally
2,多个catch块,当我们在发生不同异常时需要执行不同的任务,需要使用多个catch。需要注意的是,一次只有一个异常被捕获,一次只能执行一个catch;catch按照从具体到通用的顺序排序。
3,finally是无论是否处理异常都会执行,常用于关闭文件,关闭连接等操作。finally只有一个。注意:调用 System.exit() 或通过导致进程中止的致命错误。
4,trycatch中有return时,finally仍会执行;finally中有return程序会提前退出,返回的值不是trycatch中的值。
try-catch-finally中有return感觉是笔试必考的了,拎出来讲吧:
1,try{} catch{} finally{} return;:正常运行
2,try{return;} catch{} finally{} return;:首先执行try语句包括return后边的语句,再执行finally中的语句,最后执行try的return。(返回值为try中的return表达式的值,finally后的return不执行)
3,try{} catch{return;} finally{} return;:首先执行try语句;
异常:执行catch语句包括return后边语句,再执行finally语句,最后执行catch的return,finally之后的return不执行
正常:执行finally语句,然后return。
4,try{return}catch{}finally{return;}:首先执行try中语句和return后的语句,然后执行finally中的语句,最后执行finally中的return ,然后就提前退出了。
5,try{}catch{return}finally{return;}:
异常:执行catch语句和return后的语句,然后执行finally中的语句,最后执行finally的return,然后提前退出。
正常:执行finally中的语句,return。
6,try{return}catch{return}finally{return}:首先执行try中语句和return后的语句,
异常:执行catch中的语句和return后边的语句,然后执行finally中的语句,执行finally中的return提前退出。
正常:执行finally中的语句,再finally中的return。