黑马程序员_异常架构和异常处理

来源:互联网 发布:用户数据安全保护 编辑:程序博客网 时间:2024/05/21 11:21

------- android培训java培训、期待与您交流! ----------

异常:

异常也称为例外,是在程序运行过程中发生的、会打断程序正常执行的事件,几种常见的异常:

1、算术异常(ArithmeticException)。

2、没有给对象开辟内存空间时会出现空指针异常(NullPointerException)。

3、找不到文件异常(FileNotFoundException)。

所以在程序设计时,必须考虑到可能发生的异常事件,并做出相应的处理。这样才能保证程序可以正常运行。

Java的异常处理机制也有着面向对象的基本思想。在Java中,所有的异常都是以类的类型存在,除了内置的异常类之外,Java也可以自定义的异常类。此外Java的异常处理机制也允许自定义抛出异常。

 举个例子说明:

public class ExceptionTest{public static void main(String args[]){int[] arr = new int[1];//数组大小为1个元素System.out.println("arr[1] = "+arr[1]);//数组角标是下标值超出所容许的范围}}
运算结果如下:C:\Users\lenovo\Desktop>javac ExceptionTest.javaC:\Users\lenovo\Desktop>java ExceptionTestException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1        at ExceptionTest.main(ExceptionTest.java:6)C:\Users\lenovo\Desktop>

错误的原因在于数组的下标值超出了最大允许的范围。Java发现这个错误之后,便由系统抛出“ArrayIndexOutOfBoundsException”这个种类的异常,用来表示错误的原因,并停止运行程序。如果没有编写相应的处理异常的程序代码,则Java的默认异常处理机制会先抛出异常、然后停止程序运行。

异常的处理格式:

格式1:try{要检查的程序语句;}catch(Exception e){异常发生时的处理语句;}finally{一定会运行到的程序代码;}格式2:try{要检查的程序语句;}catch(Exception e){异常发生时的处理语句;}格式3:try{要检查的程序语句;}finally{一定会运行到的程序代码;}

处理异常的顺序:

1、try程序块若是有异常发生时,程序的运行便中断并抛出“异常类所产生的对象”。

2、抛出的对象如果属于catch()括号内捕获的异常类,则catch会捕捉此异常并进到catch的块里继续运行。

3、try程序块是否有捕捉到异常,或者捕捉到的异常是否与catch()括号里的异常相同,最后一定会运行finally块里的程序代码,finally只有一种情况不会执行,当执行到System.exit(0);fianlly不会执行。finally的程序代码块运行结束后,程序再回到try-catch-finally块之后继续执行。

由上述过程可知,异常捕捉过程中做了两个判断:

1、try程序块是否有异常产生。

2、产生的异常是否和catch()括号内捕捉的异常相同。

finally块是可以省略的,如果省略了finally块不写,则在catch()块运行结束后,程序跳到try-cath块之后继续执行。

异常处理示例:

public class ExceptionTest{public static void main(String args[]){try//检查这个程序块的语句{int[] arr = new int[1];//数组大小为1个元素System.out.println("arr[1] = "+arr[1]);//数组角标是下标值超出所容许的范围}catch(ArrayIndexOutOfBoundsException e)//处理try块检测到的异常{System.out.println("数组超出范围");}finally//这个块的代码一定会执行{System.out.println("这里一定会被执行");}System.out.println("程序运行完成");}}
运行结果如下:C:\Users\lenovo\Desktop>javac ExceptionTest.javaC:\Users\lenovo\Desktop>java ExceptionTest数组超出范围这里一定会被执行程序运行完成C:\Users\lenovo\Desktop>

异常类的继承架构:

Throwable|--Error|--Exception|--IOException|--RuntimeException

习惯上将Error与Exception类统称为异常类,但本质上还是不同。Error类专门用来处理严重影响程序运行的错误,通常程序设计者不会去捕捉这种错误,其原因在于即使捕捉到它,也无法给予适当的处理,如JAVA虚拟机出错就属于一种Error。

不同于Error类的Exception类包含了一般性的异常,这些异常通常在捕捉到之后便可做妥善处理,以确保程序继续运行,如ExceptionTest.java里所捕捉到的ArrayIndexOutOfBoundsException就是属于这种异常。从异常类的继承架构可以看出:Exception类扩展出数个子类,其中IOException、RunntimeException是较常用的两种。RunntimeException即使不编写异常处理的程序代码,依然可以编译成功,而这种异常必须是在程序运行时才有可能发生,例如:数组的索引值超出了范围,与RunntimeException不同的是,IOException一定要编写异常处理的程序代码才行,它通常用来处理与输入/输出相关的操作,如读写文件等,当异常发生时,发生异常的语句代码会抛出一个异常类的实例化对象,然后把此对象与catch语句中的类的类型进行匹配并进行处理。

------- android培训java培训、期待与您交流! ----------

详细请登录:http://edu.csdn.net/heima

原创粉丝点击