java中全部异常类都继承Throwable类,Throwable主要有两个子类,为Error 和 Exception。java
Error 主要为虚拟机错误(VirtualMachineError)和线程死锁(ThreadDeath)。若是出现了Error错误,意味着程序崩溃了。数组
Exception 通常指编码、环境、用户操做输入出现了问题。Exception主要分两类,RuntimeException(非检查异常)和检查异常。引发RuntimeException的缘由有不少,好比引用了一个空对象的属性或方法(NullPointerException),也有多是数组访问越界(ArrayIndexOutOfBoundsException)或者是错误的类型转换(ClassCastException),还有算术方面的错误(ArithmeticException)。此类异常由java虚拟机抛出并处理,出现运行时异常通常是代码自己有问题,应该从逻辑方面来改进代码。引发检查异常的缘由也不少:好比说文件异常(IOException)、SQL异常(SQLException). 此类异常须要手动添加处理代码,java虚拟机不处理。编码
异常处理:线程
try...catch:若是try中的语句出现异常,程序的控制权将被移交给catch块中的一场处理程序。咱们能够在一个try后面输入多个catch块,来主要不一样异常。catch块的书写顺序要按从小到大的顺序来写。如:ArithmeticException-->Exception.code
try...catch...finally:finally中输入最终要执行的代码。无论有没有发生异常都会执行finally里的语句。
对象
5.java中的异常抛出以及自定义异常继承
a.异常抛出
资源
i.throw : 讲产生的异常抛出(动做)
虚拟机
ii.throws :写在方法名或者方法的参数表以后,在方法体以前。
it
public void 方法名(参数列表) throws 异常列表{ throw new Exception(); }
b.自定义异常
class 自定义异常类 extends 异常类型{};
public class DrunkException extends Exception{ public DrunkException(){} public DrunkException(String message){ super(message); } }
6.java中的异常链
public class ChainException(){ public static void main(String args[]){ ChainException ce = new ChainException(); try{ ce.test2(); }catch(Exception e){ e.printStackTrace(); } } public void test1() throws DrunkException{ throw new DrunkException("喝酒别开车"); } public void test2(){ try{ test1(); }catch(DrunkException e){ RuntimeException runExce = new RunctimeException("司机一滴酒,亲人两行泪 ~~"); runExce.initCause(e); //或者 RuntimeException runExce = new RunctimeException(e); throw runExce; } } }
7.总结:
a.处理运行时异常,采用逻辑去合理规避同时辅助try-catch语句。
b.在多重catch以后,加上catch(Exception e)来处理可能会被遗漏的异常。
c.对于不肯定的代码,也能够加上try-catch,处理潜在的异常。
d.尽可能去处理异常,切忌只是简单的调用printStackTrace()去打印异常。
e.具体若是处理异常,要根据不一样业务需求和异常类型去决定。
f.尽可能添加finally语句块,来释放占用的资源。