您的位置:首页 > 其它

异常知识总结

2011-12-31 20:36 169 查看
异常的概念:异常时程序在执行时发生的事件,它会打断指令的正常流程.Java中的异常类型为终止类型。
使用异常的原因:在当前环境中还没有足够的信息来解决这个问题,所有就把这个问题提交到更高层次的环境中,在那里做出正确的决定。
使用异常的好处:可以降低错误处理代码的复杂度,避免过多的条件测试。
Java的异常:

监控区域:可能产生异常的代码,即try块内部的代码,并且后面跟着处理这些异常的代码。处理异常的代码称为即异常处理程序,即catch块内的代码。
异常说明:属于方法声明的一部分,紧跟在形式参数列表之后,用来告知客户端程序员这个方法可能会抛出的异常类型,形式通常是void f() throws xxException{};
Throwable这个Java类被用来标识任何可以作为异常被抛出的类,Throwable可以分为两种类型:Error表示编译时和系统错误;Exception是可以被抛出的基本类型Java程序员关心的基本类型通常是Exception。
Exception的子类分类两类:运行时异常和非运行时异常。
运行时异常继承于RuntimeException,如NullPointerException,IndexOutOfBoundsException等;他们也被称为“不受检查异常”。对于运行时异常,通常不用捕获,但是可以在代码中抛出RuntimeException。
非运行时异常,即所有继承与Exception而不继承与RuntimeExcpetion的异常。它们也被称为“被检查异常”,被检查异常如果被抛出,则需要被捕获,否则会报编译错误。
栈轨迹: Throwable类提供一个printStackTrace()方法,它提供的信息可以通过getStackTrace()方法来直接访问,这个方法将返回一个由栈轨迹中的元素所构成的元素所构成的数组,其中每个元素表示一帧。0号元素是张顶元素,并且是调用序列中的最后一个方法调用(这个Throwable被创建和抛出之处)。数组中的最后一个元素是调用调用序列的第一个方法调用。
重新抛出异常

捕获异常之后,在异常处理程序里面,做一些处理之后,重新抛出。此时异常对象的所有信息都会得以保持。

try{
//code that generates exception
}catch(Exception e)
{
//cleanup code
throw e;
}

2. 调用异常对象的fillInStackTrace()方式重新抛出。此时,将当前堆栈信息填入原来那个异常对象而建立一个新的异常对象。
try{
//code generate exception
}catch(Exception e)
{
//cleanup code
throw new (Exception)e.fillInStackTrace();
}


3. 异常链方式,如果想捕获一个异常后抛出另一个异常,并且希望把原始异常的信息保存下来,可以使用异常链。Throwable的子类的构造器都可以接受一个cause对象作为参数,这个cause就用来表示原始异常,这样通过把原始异常传递给新的异常,使得即使在当前位置创建并抛出的新的异常,也能通过这个异常链跟踪到最初发生的位置。

try{
//code generate excepion
}catch(Exception e)
{
//cleanup code
throw new Exception(e);
}


异常的限制:当覆盖方法的时候,只能抛出基类方法的异常说明里列出的那些异常或是它们的子类,或者干脆可以不抛出。
派生类构造器不能捕获基类的构造器抛出的异常,只能在派生类构造器中将其抛出。
异常匹配:抛出异常的时候,异常系统会按照代码的书写顺序找出“最近”的处理程序。

class MyException extends exception{}

try{
throw new MyException();
}catch(Exception e)
{
//do something
}catch(MyException e)/*unreachable code,compile-error*/
{
//do something
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: