程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。
所有的程序都存在一些未知的问题或是错误,如果这些问题不进行处理的话,可能会给用户造成一定的损失。
程序中一旦有异常发生,则会执行提前准备好的一段代码,减少损失,不会中断程序。
Java 的异常处理机制也秉承着面向对象的基本思想。在 Java 中,所有的异常都是以类的类型存在,除了内置的异常类之外,Java 也可以自定义的异常类。此外,Java 的异常处理机制也允许自定义抛出异常。关于这些概念,将在后面介绍。
Java的一场体系是基于class面向对象思想设计的,继承关系如下:
┌───────────┐
│ Object │
└───────────┘
▲
│
┌───────────┐
│ Throwable │
└───────────┘
▲
┌─────────┴─────────┐
│ │
┌───────────┐ ┌───────────┐
│ Error │ │ Exception │
└───────────┘ └───────────┘
▲ ▲
┌───────┘ ┌────┴──────────┐
│ │ │
┌─────────────────┐ ┌─────────────────┐┌───────────┐
│OutOfMemoryError │... │RuntimeException ││IOException│...
└─────────────────┘ └─────────────────┘└───────────┘
▲
┌───────────┴─────────────┐
│ │
┌─────────────────────┐ ┌─────────────────────────┐
│NullPointerException │ │IllegalArgumentException │...
└─────────────────────┘ └─────────────────────────┘
从继承关系可以知晓:Throwable是一场体系的根,它继承自Object。 Throwable有两个分支体系:Error和Exception。
Error表示严重的错误,程序员对此一般都无能为力:
例如:
OutOfMemoryError :内存耗尽。
NoClassDefFoundError :无法加载某个类。
StackOverflowError :虚拟机栈溢出。
Exception则表示一般的可以处理的错误,程序员一般都可以通过捕获并处理去解决某些异常时应用程序逻辑处理的一部分,应该被捕获并处理:
例如:
NumberFormatException :数值类型的格式错误。
FileNotFoundException :未找到文件。
SocketException:读取网络失败。
还有一些宜昌市程序逻辑编写部队造成的,应该修复程序本身。
例如:
NullPointerException 该异常时应该调用了某个引用指向null的对象调用了方法或者字段。
ArrayIndexOutOfBoundsException 数组索引越界。