下面介绍几种常见的异常类型,便于在出错时对程序进行查错:html
(1)Exception 各类异常的根类java
若是你不知道将发生的异常集体属于哪,而能够确定种这个地方会出现异常时,能够把异常类型定义为Exception。编程
(2)ArithmeticException 算数运算错误异常数组
这个异常是在算数运算时常常遇到的,常见的状况是除数为0时抛出的异常。指针
(3)ArrayIndexOfOutBoundsException 数组下标越界code
编程时要记住Java数组下标是从0开始的,数组下标最大值为数组长度减1,如arr[10],最后一个数组元素是arr[9],若是写成arr[10]就会出现ArrayIndexOfOutBoundsException异常。orm
(4)NullPointException 空指针异常htm
这个异常是针对调用未经初始化或未定义的对象抛出的异常。对象
(5)ClassNotFoundException 不能加载所需的类blog
在java文件编译后,多是因为须要把.class文件移到了其余的文件夹,此时引用这个.class文件要注意修改其路径,不然会抛出ClassNotFoundException异常。
(6)InputMismatchException 输入的数据类型与所需类型不匹配异常
好比你须要int类型,可是经过输入框获得的是String类型,就会抛出InputMismatchException异常。
(7)IllegalArgumentException 方法接受非法参数
这个是传入方法中的参数类型不正确,如方法plus(int a,int b),调用时写成a.plus(1,a)就会出现
IllegalArgumentException异常。
(8)NumberFormatException 字符串转换成数字异常
在数据类型强制转换时出现的异常,字符串“123”转换成数字123不会出现异常,可是字符串“1@23”转换成int类型就会抛出ClassCastException异常。
这些是常见的RunTimeException(运行时异常),也就是说,这些异常不须要强制声明会抛出,或者强制捕捉的异常。
举两个例子
程序出了那种异常JVM就会抛出相应的异常 好比代码:
ArrayIndexOutOfBoundsException public void demo1(){ try{ int a = 10/0; } catch(ArithmeticException ae) { System.out.println(“算术运算异常:”+ae.getMessage()); } catch(Exception e) { System.out.println(“其余异常”+e.getMessage()); } } public void demo2() { String strList[] = {"a","b","c"}; try{ String str = strList[4].toString(); } catch(ArrayIndexOutOfBoundsException ae) { System.out.println(“数组下标越界:”+ae.getMessage()); } catch(Exception e) { System.out.println(“其余异常”+e.getMessage()); } }
总之Exception是全部异常的父类.若是你出现的异常被他的子类捕捉了,他就不会再捕捉好比demo2()方法 若是是出现了ArrayIndexOutOfBoundsException Exception就不会捕捉了! 那么为何要捕捉屡次呢? 由于ArrayIndexOutOfBoundsException只是数组下标越界的异常,因此它比Exception更的仔细,更能说明异常的缘由! 若是不是出现ArrayIndexOutOfBoundsException则Exception就会来捕捉 全部异常,都继承自java.lang.Throwable类。 Throwable有两个直接子类,Error类和Exception类。 Exception Exception则可以使从任何标准Java库的类方法,本身的方法以及运行时任何异常中抛出来的基类型。 异常可分为执行异常(RuntimeException)和检查异常(Checked Exceptions)两种 RuntimeException RuntimeException在默认状况下会获得自动处理。因此一般用不着捕获RuntimeException,但在本身的封装里,也许仍然要选择抛出一部分RuntimeException。 RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。
转自:http://www.cnblogs.com/ciyan/p/4906055.html