异常和异常处理

(1)try{}中一遇到异常(包括系统定义的异常和自己throw一个异常),程序立刻跳转到catch,并且try{}中剩下的程序不会再执行。这样做防止了后面再有异常,从而保证了catch到的异常类对象的唯一性。换句话说,执行一次try{} catch语句只能捕捉到一个异常,不能同时处理try{}中的多个异常。

(2)可以有多个catch,按先后顺序比对异常,一旦合适,则下面的catch都不执行。通常可以这样写:

不管是系统定义的异常,还是自己定义的异常,都是Exception的子类,这样只要try块中抛出异常,则就会被catch到,而且会调用抛出异常相应的toString()方法(因为形参是父类对象,实参是子类对象,子类对象属于父类范畴)。

(3)不论try块中是否产生异常事件,也不论哪个catch方法被执行,finally{}中的程序都会被执行。

(4)finally{}块中可以再嵌套try{}catch块。 

 

例一:

程序运行结果:

numException: 1<2
6-3=3

 

例二:

程序运行结果:

numException: 2<3
5-3=2

 

注意比较其中sub函数的不同之处,例一中异常在sub函数中抛出,例二则是在main函数中抛出异常。

 

例三:

程序运行结果:

56/4=14
java.lang.ArithmeticException: / by zero
24/8=3
34不能整除7
java.lang.ArrayIndexOutOfBoundsException: 4

 

这是一个反复抛出异常的例子,包括系统定义的异常和自定义的异常。其中包括许多知识点,比如:

(1)抛出系统定义的异常不用throw,而系统自己会根据条件来自动抛出,例如除数为0、数组下标越界等等。而用户自定义的异常则需要显示的throw才可以。

(2)在catch异常时要注意,可以每个异常都自己定义一个catch,不过为了简便可写成这样

这个时候要注意,不能再在下面写

因为numException是Exception的子类,如果有numException类的异常被抛出,则会被第一个catch到,这样重复定义会报错。

相关文章
相关标签/搜索