异常

行为的意外结果可以分为两类:

    可以处理的意外结果称为异常(Exception)

    处理不了的意外结果称为错误(Error)
  
  异常是一种特殊的对象,类型为java.lang.Exception或器子类
  

 java的异常处理的5个关键字:

  a.捕获异常

   try-->执行可能产生异常的代码

   catch-->捕获异常

   finally-->无论是否发生异常,代码总能执行

  b.声明异常

   throws-->声明方法可能要抛出的各种异常

  c.抛出异常

   throw-->手动抛出异常

使用try-catch块捕获异常:

   情况一:正常

      try(无异常)     catch     try-catch后的代码段

        |                    |    |

         ---------------------------
      
   情况二:出现异常

      try(有异常)               catch ---->try-catch后的代码段

        |                                |      |

        -->产生异常对象-->异常类型匹配-->程序继续进行

   情况三:异常类里不匹配

       try(有异常)      catch ---->try-catch后的代码段

         |           |        | 

        -->产生异常对象-->异常类型不匹配-->异常类型不匹配,程序中断运行


 在catch块中处理异常:

  a.加入自定义处理信息

        System.err.ptintln("自定义内容")

  b.调用方法输出异常信息

        e.printStackTrace();

  c.异常对象常用方法

        void printStackTrace():输出异常的堆椎信息

        String getMessage():返回异常信息描述字符串是printStackTrace()输出信息一部分


 Java异常机制:

  a.代码运行到可能出现异常时,由程序或Java抛出异常对象,异常对象会记录相关信息

  b.异常对象抛出后,会去寻找异常处理的相关代码(catch),如果找到异常结束

  c.如果未找到,异常对象会继续上抛,寻找异常处理代码

  d.如果到main还未找异常抛给到异常处理代码,就会有main将异常抛给虚拟机

  e.异常抛出的每一层代码都会中断


 常见异常类型:

    异常类型                                    说明

Exception                              异常层次结构的父类

ArithmeticException                     算术错误情形,如以0做除数

ArrayIndexOutBoundsException         数组下标越界

NullPointerException                     尝试访问null对象成员

ClassNotFoundException                  不能加载所需类

IllegalArgumentException                 方法接收到非法参数

ClassCastException                      对象强制类型转换出错

NumberFormatException                  数字格式化转换异常,如把"ABC"转为数字

finally:
  是否发生异常都会执行finally块中的代码

  唯一不执行的情况:System.exit(1);


存在return的try-catch-finally块:

  try--->产生异常对象--->异常类型匹配--->进入catch--->执行finally--->执行return退出方法


try、catch、finally使用规则:

    try{

     //必须出现,且只能出现一次

    }catch{

     //可以出现0~n次,如果没有catch就必须有finally

    }finally{

     //可以出现0~1次

    }
    

多重catch块:

  a.排列catch语句顺序:先子类后父类

  b.发生异常时按顺序逐个匹配

  c.只执行第一个与异常类型匹配的catch语句

try--->产生异常对象--->异常类型1不匹配--->异常类型2匹配-->进入catch--->catch-->try-catch后的代码段


Java异常分类:

  a运行时异常:在代码编译的时候不会进行检测,在代码运行时的过程中产生异常,

     RuntimeException及其子类都属于运行时异常,

     还有ArithmeticException、NullPointeException、NumberFormatException

  b.检查异常/检测异常:在代码编译的时候显示必须处理,才能通过编译器的编译,

     如:SQLException、ClassNoFoundException


throw、throws:

  a.throws声明某个方法可能抛出的各种异常

  b.throws可以让检查异常通过编译器的编译,但没有真正解决异常

  c.throw手动抛出异常,并可以定义异常的信息

  d.throws可以声明多个异常,多个异常之间用逗号隔开
     

 自定义异常:

  写一个异常类,继承Exception

  手动实现Exception的构造方法

原文地址:https://www.cnblogs.com/yiui/p/6912022.html