赞
踩
昨天阿里面试官问了我这个问题,当时有点蒙。可能对于这两个词不太敏感吧,没答上来。当时如果面试官问错误类型有哪几种就能答上来了。还是自己太菜了,对很多知识掌握不够牢固。
异常总览
在java中,异常分为两种,运行时异常(也就是uncheckException)和已检查异常checkException,运行时异常包括平常遇到的各种异常,如空指针异常,数据格式异常等一系列异常,这种异常是可以不捕获的,可通过throws抛出异常,交给别的代码或者JAVA虚拟机来完成。但checkException是必须要处理的,也就是不能抛出,必须通过try-catch来完成,不处理的话是不能进行编译的。但是checkException不是一个具体的异常类型,它只是一个概念。所以你判断一个异常是已检查异常还是未检查异常,只需要通过抛出这个异常就可以知道了。
其中RuntimeException +Error 和其子类都是属于 uncheckexception,Exception类中除了 RuntimeException之外的类 都是属于 checkexception。
Error类
Error是系统中的错误,程序员是不能通过代码进行逻辑捕获的,这个错误是在程序编译时出现的,只能通过修改代码才能改正。属于uncheckedException。
如:内存空间不足,方法调用栈溢等。
受检异常(checkedException)
除去RuntimeException和Error外的异常都属于受检异常,该异常需要强制处理(throws给方法调用者,或者在发生的方法中try/catch掉)。
常见受检异常如下:
Java.lang.ClassNotFoundException --找不到类异常
Java.lang.CloneNotSupportedException --clone异常-未实现Cloneable接口
Java.lang.IOException --IO流异常
Java.lang.SqlException --sql异常
Java.lang.IllegalAccessException --访问权限异常-private
Java.lang.DataFormatException --数据格式化异常
Java.lang.NoSuchFieldException --反射异常
Java.lang.NoSuchMethodException --方法未找到异常
非受检异常(uncheckedException)
RuntimeException是所有非受检异常类的基类,即所有非受检异常继承自该类。该类异常不强制处理,但通常开发人员为了代码健全会进行封装处理,该异常发生的原因也通常是程序员对逻辑的考虑不周而出现的。
常见非受检异常如下:
Java.lang.ClassCastException --类型转换异常
Java.lang.NumberFormatException --数字转换异常
Java.lang.NullPointerException --空指针异常
Java.lang.IndexOutOfBoundsException --索引越界异常
Java.lang.ArrayIndexOutOfBoundsException --数组下标越界异常
Java.lang.StringIndexOutOfBoundsException --字符串截取下标越界异常
Java.lang.NegativeArraySizeException --数组大小为负数异常
Java.lang.ArithmeticException --算术异常
Java.lang.ArrayStoreException --数组元素不匹配异常
Java.lang.EnumConstantNotPresentException --枚举常量不存在异常
Java.lang.IllegalArgumentException --非法参数异常
Java.lang.IllegalThreadStateException --线程异常
Java.lang.IllegalMonitorStateException --违法的监控状态异常
Java.lang.TypeNotPresentException --类型不存在异常
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。