我所理解的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的子类,表示由于程序逻辑错误引起的异常,应该是需要改变程序逻辑而避免发生的。代码中允许不捕获。比较典型的有

  • 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在使用时的具体情况。

转载于:https://my.oschina.net/u/3466682/blog/1594215

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值