Java常见的异常
郭旭升 Lv6

常见异常类型

  • NullPointerException 空指针异常
  • ArrayIndexOutOfBoundsException 索引越界异常
  • InputFormatException输入类型不匹配异常
  • SQLException SQL异常
  • IllegalArgumentException 非法参数异常
  • NumberFormatException 类型转换异常

异常解决方法

Java内建了通用的异常,以Throwable为顶层父类。
Throwable派生出Error和Exception类。

Error:Error类以及子类的实例,代表JVM本身的错误,不能被程序员通过代码处理。
Exception:Exception以及子类,代表程序运行时发送的各种不期望发生的时间。可以被java异常处理机制使用,是异常处理的核心。

处理方法

  1. try catch

    1
    2
    3
    4
    5
    try{
    // 程序代码
    }catch(ExceptionName e1){
    //Catch 块
    }
  2. throw
    throw 关键字作用是抛出一个异常,抛出时候是抛出一个异常类的实例化对象,在异常处理中,try语句捕获的就是一个异常对象,那么异常对象也可以自己抛出。

  3. throws
    定义一个方法的时候可以用throws关键字声明。使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用着进行处理。

异常的层次结构

Java通过API 中Throwable类的众多子类描述各种不同的异常。Java异常都是对象,是Throwable子类的实例。

  • Throwable
    包含两个子类:Error(错误) 和 Exception(异常)
    包含了线程创建时线程执行堆栈的快照,提供了printStackTrace()等接口用于获取堆栈跟踪数据等信息。

  • Error
    Error类及其子类: 程序中无法处理的错误, 表示运行应用程序中出现了严重的错误。
    一般表示运行时JVM出现问题。 通常由Virtual MachineError 虚拟机运行错误, NoClassDefFoundError(类定义错误)。OutOfMemoryError:内存不足错误;StackOverflow: 栈溢出错误。 此类错误发生时, JVM将终止线程。

  • Exception
    程序本身可以捕获并且可以处理的异常。Exception分为两类:运行时异常和编译时异常。

运行时异常
RuntimeException类和其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常),这些异常是不检查异常,程序可以选择捕获,也可以不处理。这些异常一般由程序逻辑错误引起。
Java编译器不会检查它, 程序中可能出现这类一场,即使没有捕获或者抛出,也会编译通过。

非运行时异常(编译异常)
除了RuntimeException之外的异常,类型上属于Exception类及其子类。程序语法角度必须进行处理的异常,如果不处理,程序不能编译通过。如IOException、SQLException等用户自定义的Exception异常,一把情况下不自定义检查异常。

可查异常和不可查的异常

  • 可查异常(编译器要求必须处理的异常)
    在一定程度上它的发生是可以预计的,一旦发生,必须采取某种方式进行处理。除了RuntimeException及其子类以外,其他的Exception类及其子类都是可查异常。这类异常的特点是编译器会检查,(非运行时异常)。当程序中可能出现这类异常,要么try-catch语句捕获它,要么用throws 子句抛出它,否则编译器不通过。

  • 不可查异常(编译器不要求强制处理的异常)
    包括运行时异常(RuntimeException与其子类)和错误(Error)。

 Comments