Java 异常处理及输入输出流
1 异常处理概述
Java 异常是描述在代码段中发生的运行出错情况的对象。程序中的错误可能来自于编译错
误和运行错误。编译错误是由于所编写的程序存在语法问题,未能通过由源代码到目标代码的
编译过程而产生的错误,它将由语言的编译系统负责检测和报告;运行错误是在程序的运行过
程中产生的错误。
1.1 什么是异常
在程序执行中,任何中断正常程序流程的异常条件就是错误或异常。
第一种,Java 虚拟机检测到了非正常的执行状态,这些状态可能是由以下几种情况引起的:
① 表达式的计算违反了 Java 语言的语义,例如整数被 0 除。
② 在载入或链接 Java 程序时出错。
③ 超出了某些资源限制,例如使用了太多的内存。
第二种,Java 程序代码中的 throw 语句被执行。
第三种,异步异常发生。异步异常的原因可能有:
① Thread 的 stop 方法被调用。
② Java 虚拟机内部错误发生。
1.2 异常处理机制
Java 异常处理是通过 5 个关键字来管理的。它们是 try、catch、throw、throws 和 finally。
程序里,需要被监测的程序语句序列应包含在一个 try 代码块中。如果 try 代码块中有异常
发生,那么就要抛出该异常。可以用 catch 来捕获这个异常,并且在 catch 块中加以适当地处理。
系统产生的异常会由 Java 运行时系统自动抛出。如果要手动抛出异常,则使用关键字 throw。
在一些情况下,从一个方法抛出的异常必须用一个 throws 语句指定为异常。最后,从 try 代码
块退出时,必须执行的代码要放在一个 finally 代码块中。
1.3 异常分类
Java 中的异常类具有层次组织,其中 Throwable 类是 Error 类(错误类)和 Exception 类
(异常类)的父类,Throwable 是 Object 的直接子类。
异常类(java.lang.Exception)继承于 java.lang.Object 中的 java.lang.Throwable 类。异常可
分为执行异常(RuntimeException)和检查异常(Checked Exceptions)两种。
异常类的继承结构
1.执行异常
即运行时异常,继承于 RuntimeException。Java 编译器允许程序不做处理。
ArithmeticException:一个不寻常算术运算产生的异常。
ArrayStoreException:存入数组的内容数据类型不一致所产生的异常。
ArrayIndexOutOfBoundsException:数组索引超出范围所产生的异常。
ClassCastExcption:类对象强迫转换造成不当类对象所产生的异常。
NumberFormatException:字符串转换数值所产生的异常。
IndexOutOfBoundsException:索引超出范围所产生的异常。
NegativeException:数组建立负值索引所产生的异常。
NullPointerException:对象引用参考值为 null 所产生的异常。
2.检查异常
除了执行异常外,其余的子类是属于检查
异常类也称为非运行时异常,它们都在
java.lang 类库内定义。Java 编译器要求程序必须捕获或者声明抛弃这种异常。