异常知识总结
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被创建和抛出之处)。数组中的最后一个元素是调用调用序列的第一个方法调用。
重新抛出异常:
捕获异常之后,在异常处理程序里面,做一些处理之后,重新抛出。此时异常对象的所有信息都会得以保持。
2. 调用异常对象的fillInStackTrace()方式重新抛出。此时,将当前堆栈信息填入原来那个异常对象而建立一个新的异常对象。
3. 异常链方式,如果想捕获一个异常后抛出另一个异常,并且希望把原始异常的信息保存下来,可以使用异常链。Throwable的子类的构造器都可以接受一个cause对象作为参数,这个cause就用来表示原始异常,这样通过把原始异常传递给新的异常,使得即使在当前位置创建并抛出的新的异常,也能通过这个异常链跟踪到最初发生的位置。
异常的限制:当覆盖方法的时候,只能抛出基类方法的异常说明里列出的那些异常或是它们的子类,或者干脆可以不抛出。
派生类构造器不能捕获基类的构造器抛出的异常,只能在派生类构造器中将其抛出。
异常匹配:抛出异常的时候,异常系统会按照代码的书写顺序找出“最近”的处理程序。
使用异常的原因:在当前环境中还没有足够的信息来解决这个问题,所有就把这个问题提交到更高层次的环境中,在那里做出正确的决定。
使用异常的好处:可以降低错误处理代码的复杂度,避免过多的条件测试。
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 }
相关文章推荐
- 有关Java 异常处理中的知识总结
- 黑马程序员—Java编程异常知识总结
- Android日常知识收集与总结之对话框异常
- 黑马程序员——java基础知识篇——>异常总结
- 基础知识《十一》Java异常处理总结
- Java知识总结(1)——关于异常
- Java异常知识总结
- Java 基础知识总结:异常处理
- Java基础知识总结(四)——异常与异常处理表
- Java知识总结-异常
- Spring框架知识总结-注入Bean的各类异常 24小时内最新
- Java知识总结-异常
- java的异常处理。。。java知识总结(工作一年半差不多两年了,感觉是时候总结一下java,文章内容为本人观点)
- ojcp-sjcpJAVA认证考试JAVA基础知识考点总结(2)--JAVA异常
- 异常知识总结------------黑马程序员
- 基础知识总结:异常
- java知识总结(十一)异常处理机制
- 黑马程序员 Java基础知识总结-异常处理
- 黑马程序员_Java第18天知识总结_System类_Runtime类_Date_Calendar_Math_Random_InputStream_OutputStream_IO异常的处理