基本概念

  • 异样就是"不失常"的含意,在Java语言中次要重程序执行中产生的不失常状况
  • java.lang.Throwable类是Java语言中谬误Error异样Exception的超类

    • Error类次要用于形容Java虚拟机无奈解决的严重错误.通常无奈编码解决.如JVM挂掉了
    • Exception类次要用于形容因编程谬误或偶尔外在因素导致的轻微谬误,通常能够编码解决.如:0作为除数等

异样的分类

  • java.lang.Exception类是所有异样的超类.次要分为以下两种

    • RuntimeException-运行时异样,也叫作非检测性异样
    • IOException和其它异样-其它异样,也叫作检测性异样.所谓检测性异样就是指在编译阶段都能被编译器检测进去的异样

RuntimeException类的次要子类

  • ArithmeticException类 - 算术异样
  • ArrayIndexOutOfBoundsException类 - 数组下标越界异样
  • NullPointerException类 - 空指针异样
  • ClassCastException类 - 类型转换异样
  • NumberFormatException类 - 数字格局异样

异样的防止

  • 尽量应用if条件判断来防止异样的产生
  • 但过多的if条件判断会导致程序的代码加长,臃肿,可读性差

异样的捕捉

语法格局

try{     编写可能产生异样的代码;}catch(异样类型 援用变量名){     编写针对该类异样的解决代码;}...finally{     编写无论是否产生异样都要执行的代码;}

注意事项

  • 当须要编写多个catch分支时,切记小类型应该放在大类型的后面
  • finally通常用于进行善后处理,如:敞开曾经关上的文件等

执行流程

try{    a;    b; // 可能产生异样的语句    c;}catch(Exception e){    d;}finally{    e;}
  • 若没有产生异样,执行流程是: a, b, c, e
  • 若产生异样,执行流程是: a, b, d, e

异样的抛出

基本概念

在某些非凡状况下, 有些异样不能解决或不便于解决时, 就能够将该异样转移给该办法的调用者, 这种办法就叫异样的抛出.

当办法执行时出现异常, 则底层生成一个异样类对象抛出, 此时异样代码后续的代码就不再执行

语法格局

拜访权限 返回值类型 办法名称(形参列表) throws 异样类型1, 异样类型2, ... {办法体;}

public void show() throws IOException{}

办法重写的准则

  • 要求办法名雷同, 参数列表雷同, 以及返回值类型雷同.从jdk1.5开始反对返回子类类型
  • 要求办法的拜访权限不能变小, 能够雷同或者变大
  • 要求办法不能抛出更大的异样

留神

子类重写的办法不能抛出更大的异样, 不能抛出平级不一样的异样, 但能够抛出一样的异样, 更小的异样, 以及不抛出异样

教训分享

  • 若父类中被重写的办法没有抛出异样时,则子类中重写的办法只能进行异样的捕捉解决
  • 若一个办法外部又以递进形式别离调用了好几个其它办法,则倡议这些办法内能够应用抛出的办法解决到最初一层进行捕捉形式解决

自定义异样

基本概念

当须要在程序中表白年龄不合理的状况时, 而Java官网又没有提供这种针对性的异样, 此时就须要程序员自定义异样加以形容

实现流程

  1. 自定义xxxException异样类, 继承Exception类或者子类
  2. 提供两个版本的构造方法: 一个是无参构造方法, 另外一个是字符串作为参数的构造方法

异样的产生

throw new 异样类型(实参)
在须要抛出异样的退出上述语句即可.

throw new AgeException("年龄不合理");