一.异常的概念
java异常java提供的用于处理程序中错误的一种机制。
所谓的错误是指在程序运行的过程中发生一些异常事件(如:除0溢出,数组小标越界,索要读取的文件不存在等)。
设计良好的程序应该在异常发生时提供处理这些错误的方法,是的程序不会因为异常的发生而阻断或产生不可预见的结果。
java程序在执行的过程中如果出现异常事件,可以生成一个异常对象,该对象封装了异常事件的信息并将被提交给Java运行时的系统,这个过程称为抛出(throw)异常。
当Java运行时系统接收到异常的对象时,会寻找处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
二.异常分类
java中所有的异常都有一个共同的父类就是throwable(可抛出)。
throwable有两个重要的子类,分别是Exception(异常)和Error(错误)。
Error是程序无法处理的错误,表示运行应用程序中较严重的问题。
Exception是程序本身可以处理问题。
三.异常处理机制
在Java应用程序中,异常的处理机制为:抛出异常,捕获异常。
抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和和异常出现时的程序状态等异常信息。
捕获异常:在方法抛出异常之后,运行时的系统转为寻找合适的异常处理器。 潜在的异常处理器是异常发生时依次留在调用栈中的方法集合。
3.1捕获异常-
1.try-catch语句
在java中,异常通过try-catch语句捕获。其一般语法形式为:
- try {
- // 可能会发生异常的程序代码
- } catch (Type1 id1){
- // 捕获并处置try抛出的异常类型Type1
- }
- catch (Type2 id2){
- //捕获并处置try抛出的异常类型Type2
- }
关键词try后的一对大括号将一块可能发生异常的代码包起来,称为监控区域。Java方法在运行过程中出现异常,则创建异常对象。将异常抛出监控区域之 外,由Java运行时系统试图寻找匹配的catch子句以捕获异常。若有匹配的catch子句,则运行其异常处理代码,try-catch语句结束。
匹配的原则是:如果抛出的异常对象属于catch子句的异常类,或者属于该异常类的子类,则认为生成的异常对象与catch块捕获的异常类型相匹配。
例1 捕捉throw语句抛出的“除数为0”异常。
- public class TestException {
- public static void main(String[] args) {
- int a = 6;
- int b = 0;
- try { // try监控区域
- if (b == 0) throw new ArithmeticException(); // 通过throw语句抛出异常
- System.out.println("a/b的值是:" + a / b);
- }
- catch (ArithmeticException e) { // catch捕捉异常
- System.out.println("程序出现异常,变量b不能为0。");
- }
- System.out.println("程序正常结束。");
- }
- }
- public static void main(String[] args) {
- int a = 6;
- int b = 0;
- try {
- System.out.println("a/b的值是:" + a / b);
- } catch (ArithmeticException e) {
- System.out.println("程序出现异常,变量b不能为0。");
- }
- System.out.println("程序正常结束。");
- }
- }