我所理解的JDK异常

1,什么是异常
  Java程序在运行时出现的任何错误,均可以归结为异常。全部异常的父类是Throwable。Throwable在JDK中有两个子类Error和Exception。Throwable有printStackTrace()等接口用于获取堆栈跟踪数据等信息数据库

2,Error是什么
  Error用来表示JVM在运行时出错的比较严重的错误,开发人员对此类错误的发生时间是不可预知的,有些Error会致使JVM宕机,好比堆内存溢出;有些Error不会致使JVM宕机,好比栈内存溢出。   常见的Error有:StackOverFlowError和OutOfMemoryError。   StackOverflowError:当线程栈的深度超过虚拟机分配给线程的栈大小时就会出现此类错误。好比方法无限递归。   OutOfMemoryError:当虚拟机即便执行垃圾回收后也没有更多的可用的内存用来分配一个对象时会发生此类错误,好比大对象实在没法分配内存。数组

3,Exception是什么
  Exception表示程序自己能够处理的异常。Exception分为运行期异常RuntimeException和非运行期异常。线程

4,什么是非运行期异常
  非运行期异常是指在编译器就能够抛出可能发生的异常给程序调用者,由程序调用者来决定万一发生异常的时候的处理。比较典型的有指针

  • ClassNotFoundException JVM找不到指定的类文件
  • FileNotFoundException JVM找不到指定的文件
  • IOException JVM与外边发生IO操做时发生异常
  • SQLException JVM与SQL数据库交互时发生异常

5,什么是运行期异常
  RuntimeException是Exception的子类,表示因为程序逻辑错误引发的异常,应该是须要改变程序逻辑而避免发生的。代码中容许不捕获。比较典型的有orm

  • ArrayIndexOutOfBoundsException 数组索引越界
  • ClassCastException 类型不匹配,两者不是子父类关系
  • IllegalArgumentException 参数无效
  • IndexOutOfBoundsException 索引越界,好比list
  • NullPointException 空指针
  • NumberFormatException 字符串不是有效的数字

6,如何抛出与捕获异常
  使用throw抛出异常。若是方法中出现了throw非运行期异常,则该方法上会有throws 该异常,交由该方法的调用者来处理该异常
  使用try-catch或 try-catch-finally 来捕获异常。对象

  • try:可能会发生异常的代码应该在try语句块中运行。
  • catch:try语句中若是在运行时发生了异常,则进入catch语句中继续执行。
  • finally:不管是否try中发生异常,finally都执行

7,异常链
  异常每次向上抛出以及向上类型转换的时候,都会保存原始异常以及异常方法的调用,依次造成一条链,称为异常链。异常链的最顶端必然是主线程中的main()或者开发人员自定义的Thread线程的run()。递归

注意
1.try、catch、finally的组成为:索引

  • try+catch
  • try+finally
  • try+catch+finally
  • try+catch...
  • try+catch...+finally

2.JDK1.7提供的try-with-resource语句的语法以下:
  try(可能异常){执行} 同时在方法中抛出该类异常;接口

3.重写方法时,若是父类方法没有抛出异常,子类也不能抛出该类异常,只能本身catch处理内存

下一篇文章详细阐述一些我所理解的try-catch-finally在使用时的具体状况。

相关文章
相关标签/搜索