一、异常的继承结构java
运行时异常(非受检异常指的是java.lang.RuntimeException和java.lang.Error类及其子类)也称为未受检异常、非受控异常,受检异常又称为编译时异常、受控异常。异常表示程序运行过程当中可能出现的非正常状态,运行时异常表示虚拟机的一般操做中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题一般就不会发生。受检异常跟程序运行的上下文环境有关,即便程序设计无误,仍然可能因使用的问题而引起。Java编译器要求方法必须声明抛出可能发生的受检异常,可是并不要求必须声明抛出未被捕获的运行时异常。程序员
全部异常都是发生在运行阶段,由于只有在运行阶段才能new对象,异常的发生就是new异常对象。sql
编译阶段并不会发生异常,由于编译时异常必须在编译阶段预先处理,若是不处理编译器报错,所以得名。数组
(1)运行时异常安全
Java.lang.ArrayStoreExcetpion Java.lang.ClassCastException Java.lang.EnumConstantNotPresentException Java.lang.IllegalArgumentException Java.lang.IllegalThreadStateException Java.lang.NumberFormatException 数字格式异常,如:将String转换为字符串的时候,String包含字母
Java.lang.IllegalMonitorStateException Java.lang.IllegalStateException 参数传递错误 Java.lang.IndexOutOfBoundsException 数组下标越界异常 Java.lang.ArrayIndexOutOfBoundsException Java.lang.StringIndexOutOfBoundsException Java.lang.NegativeArraySizeException’ Java.lang.NullPointerException 存在未经初始化的对象后者不存在的对象
ArithmeticException :当出现异常的运算条件时,抛出此异常(算术运算异常)
Java.lang.SecurityException Java.lang.TypeNotPresentException Java.lang.UnsupprotedOperationException
(2)编译时异常:ide
Java.lang.ClassNotFoundException 指定的类不存在
Java.lang.CloneNotSupportedException
Java.lang.IllegalAccessException
Java.lang.InterruptedException
Java.lang.NoSuchFieldException
Java.lang.NoSuchMetodException 指定的方法不存在
SQLException 如:sql语句写错
二、编译时异常和运行时异常的区别spa
(1)编译时异常发生(对于发生几率较高的异常在运行以前须要进行预处理)的几率较运行时异常(几率较低,不必进行预处理)高,若是java没有将异常进行划分,那么全部的异常都须要进行预处理,虽然程序更加安全,可是程序员的的工做量将大大增长设计
(2)编译时异常与受检异常的选用:orm
一直以来,关于在程序中究竟是该使用受检异常仍是非受检异常,开发者之间一直存在着争议,毕竟两类异常都各有优缺点。受检异常的特色在于它强制要求开发人员在代码中进行显式的声明和捕获,不然就会产生编译错误。这种限制从好的方面来讲,能够防止开发人员意外地忽略某些出错的状况,由于编译器不容许出现未被处理的受检异常;从很差的方面来讲,受检异常对程序中的设计提出了更高的要求。不恰当地使用受检异常,会使代码中充斥着大量没有实际做用、只是为了经过编译而添加的代码。而非受检异常的特色是,若是不捕获异常,不会产生编译错误,异常会在运行时刻才被抛出。对象
非受检异常的好处是能够去掉一些不须要的异常处理代码,而很差之处是开发人员可能忽略某些应该处理的异常。一个典型的例子是把字符串转换成数字时会发生java.lang.NumberFormatException异常,忽略该异常可能致使一个错误的输入就形成整个程序退出。
目前的主流意见是,最好优先使用非受检异常。
(3)处理方式
受检异常:JAVA编译器强制要求咱们必需对出现的这些异常进行catch
运行时异常:是代码的错误,咱们能够不处理,当出现这样的异常时,老是由虚拟机接管
为何要使用异常机制?由于咱们要保证代码在异常的状况下依然可以执行下去,而不是意外退出
总结:
exception和error是java针对不一样的异常的分类,Exception是程序运行的时候能够捕获而且进行相应处理的问题,而Error会致使程序直接崩溃没法进行捕获和相应的处理
Exception又能够分为可检查异常和不可检查异常,可检查异常是只须要显式地进行捕获和处理的,如Exception的实例,而不可检查异常是不用显式地进行捕获和处理直接交给JVM处理,如RuntimeException异常和它的子类异常