深入理解Java异常类

来源:互联网 发布:听力打卡的软件 编辑:程序博客网 时间:2024/05/18 01:10

异常类

Java中处理异常的两种方式

  • 捕获异常:就地解决,并使程序继续执行 //积极的处理方式
    当Java运行时系统得到一个异常对象时,他将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型的异常的方法后,运行时系统把当前的异常对象交给这个异常方法后,这一过程称为捕获(catch)异常。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统中将终止,相应的Java程序也将退出。
  • 声明抛弃异常:将异常抛出方法之外,由调用该方法的环境去处理 //消极的处理方式
    如果在一个方法中生成了一个异常,但是这一方法并不确切地知道该如何对这一异常事件进行处理,这时,一个方法就应该声明抛弃异常,使得异常对象可以从调用栈向后传播,直到有合适的方法捕获它为止。

Java中预定义的异常类

Error

Error标识不可能或难以恢复的严重问题,例如内存不足,程序一般不处理这类情况。

RuntimeException

RuntimeException指示设计或实现上的问题,如果程序正确运行,这样的情况是不应该出现的。

常见异常

  • NullPointException–空指针异常
  • ArrayIndexOutOfBoundsException–数据越界异常
  • NegativeArraySizeException–数组负下标异常
  • ArithmeticException–算数异常类
  • ClassCastException–算数运算异常
  • IllegalArgumentException–传递非法参数异常
  • ArrayStoreException–向数组中存放与数组类型不符元素异常
  • NumberFormatException–数字格式异常
  • SecurityException–安全异常
  • UnsupportedOperationException–不支持的操作异常

try-catch语句

try{        //打开文件        //判断大小        //分配内存        //读入内存        //关掉文件    }catch(/*文件打开失败*/){        //处理代码    }catch(/*大小取值失败*/){        //处理代码    }catch(/*内存分配失败*/){        //处理代码    }catch(/*读取失败*/){        //处理代码    }catch(/*关闭文件失败*/){        //处理代码    }finally{    //总是执行的代码,即使碰到return也执行finally后才return,除非遇到System.exit(),程序会立刻退出      }

throw/throws抛出异常

//抛出的对象必须是Throwable的子类public int read () throws IOException{                ......    }public static void main(String args[]) throws IOException, IndexOutOfBoundsException {                ······}

堆栈调用机制

  • 如果一个try-catch块中没有处理,那么将会抛向此方法的调用者
  • 如果一个异常回到main方法,而且也没有处理,那么程序终将终止
    堆栈处理机制

自定义异常类

public class MydateException extends Exception{    private String reason;    public MydateException(String r){        reason = r;    }    public String getReason(){        return reason;    }}public class Mydate {    int year,month,day;    void setDate(int year,int month,int day) throws MydateException{        if(day>31)            throw new MydateException("day too big");        this.year = year;        this.month = month;        this.day = day;    }    public static void main(String[] args){        Mydate t = new Mydate();        try {            t.setDate(2001,1,100);        }catch (MydateException e){            System.out.println(e.getReason());        }    }}
1 0
原创粉丝点击