30岁程序员的未来心路

Java中的异常有哪几类?分别怎么使用?

2018-05-15  本文已影响0人  夜暗殇

从根本上讲所有的异常都属于Throwable的子类,从大的方面讲分为Error(错误)和Exception(异常)。Eror是程序无法处理的异常,当发生Error时程序线程会终止运行。我们一般意义上讲的异常就是指的Exception,这也是面试官常问的问题。

下面就简单说一下关于Exception(以下都简称异常)的一点理解。

异常分为运行时异常(RuntimeException,又叫非检查时异常)和非运行时异常(又叫检查异常)。下面列举一下常见的运行时异常:

NullPointerException - 试图访问一空对象的变量、方法或空数组的元素

ArrayIndexOutOfBoundsException - 数组越界访问

NoClassDefFoundException - JAVA运行时系统找不到所引用的类

ArithmeticException - 算术运算中,被0除或模除

ArrayStoreException - 数据存储异常,写数组操作时,对象或数据类型不兼容

ClassCastException - 类型转换异常

IllegalArgumentException - 方法的参数无效

IllegalThreadStateException - 试图非法改变线程状态,比方说试图启动一已经运行的线程

NumberFormatException - 数据格式异常,试图把一字符串非法转换成数值(或相反)

SecurityException - 如果Applet试图执行一被WWW浏览器安全设置所禁止的操作

IncompatibleClassChangeException - 如改变了某一类定义,却没有重新编译其他引用了这个类的对象。如某一成员变量的声明被从静态改变为非静态,但其他引用了这个变量的类却没有重新编译,或者相反。如删除了类声明中的某一域或方法,但没有重新编译那些引用了这个域或方法的类

OutOfMemoryException - 内存不足,通常发生于创建对象之时

IncompatibleTypeException - 试图实例化一个接口,Java运行时系统将抛出这个异常

UnsatisfiedLinkException - 如果所需调用的方法是C函数,但Java运行时系统却无法连接这个函数

InternalException - 系统内部故障所导致的异常情况,可能是因为Java运行时系统本身的原因。如果发现一可重现的InternalException,可以直接给Sun公司发电邮java@java.Sun.com

前三种异常是我在开发中经常性遇到的问题,对于运行时异常通过它的别名(非检查是异常)我们可以知道这些异常不是我们写代码的时候可以检查到的,而是程序在运行的时候可能会发生的,也就是说这是在业务逻辑上可能会出现的问题。对于这类异常就需要我们在开发的时候尽量的把业务逻辑可能会出现的问题考虑清楚,进行异常捕捉。常用的方法包括:try{}catch(Exception e){}finally{}和throws两种办法。try{}catch(Exception e){}finally{}是在方法中对异常进行捕获,catch可以写多个,Java运行时系统从上到下分别对每个catch语句处理的例外类型进行检测,直到找到类型相匹配的catch语句为止。(具体的就不过多赘述)throws是出现在方法头部,个人理解算是在最外层抛出异常。关于对运行时异常的处理,详情可以看这篇文章http://blog.csdn.net/zhuangzhineng/article/details/4000821,里面讲的格外详细,这里就不过多赘述。

非运行时异常中我们常遇到的可能有IOException、SQLException等,这类异常就是我们编写的代码、sql语句的问题了,这就需要我们回到代码中仔细检查了。

上一篇下一篇

猜你喜欢

热点阅读