1. 如何显示异常信息
前面学习了各种异常类及异常语句的用法。在实际编程过程中,还需要显示导致异常出现的信息,方便程序员根据给出的异常信息查找程序错误。异常类提供了输出异常信息的两个方法:getMessage方法和printStackTrace方法。
getMessage方法
用于获取异常的详细消息字符串。
printStackTrace方法
输出Throwable对象的堆栈跟踪信息到控制台。
在catch中声明的异常对象catch(Exception ex)封装了异常事件发生的信息,在catch语句块中可以使用这个对象的getMessage方法获取错误信息。
getMessage的使用方法示例如下:
public static void main(String[] args) {
try {
int i = 12 / 0;
} catch (Exception e) {
System.out.println(e.getMessage());
}运行代码,因为被零除,所以发生异常,输出“/ by zero”。
printStackTrace的用法示例如下:
public static void main(String[] args) {
try {
int i = 12 / 0;
} catch (Exception e) {
e.printStackTrace();
}
}运行上述代码,输出结果如下下图所示:
使用printStackTrace方法可以获取异常的具体类型,这样就可以在使用throw时抛出一个确定的异常类型。
案例1:建立ShowExcepMessage类,输出异常信息到控制台。
在throwdemo包下新建ShowExcepMessage类。代码如下:
public class ShowExcepMessage {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
try {
int i = 12 / 0;
} catch (Exception e) {
System.out.println("异常消息" + e.getMessage());
// 打印程序运行信息
e.printStackTrace();
}
}
}程序执行结果如下图所示:

2. 异常的分类
从编程角度考虑,可以将异常分为以下几种。
(1)非受检异常
非受检异常是指编译器不要求强制处置的异常。一般是指因设计或实现方式不当而导致的问题。也可以说,是程序员的原因导致的,是本来可以避免发生的情况。
java.lang.RuntimeException类及其子类都是非受检异常。具体如下:
● java.lang.ClassCastException:错误的类型转换异常。
● java.lang.ArrayIndexOutOfBoundsException:组下标越界异常。
● java.lang.NullPointException:空指针访问异常。
● java.lang.ArithmeticException:除零溢出异常。
如果事先检查数组元素下标,保证其不超出数组长度,ArrayIndexOutOfBoundsException异常就不会抛出;再如,先检查并确保一个引用类型变量值不为NULL,然后再访问其属性和方法,那么,NullPointException异常就不会抛出。因此,如果程序设计良好并且正确实现,这类异常就不会发生,所以通常也不会处理这类异常。
(2)受检异常
受检异常是指编译器要求必须处置的异常,即程序在运行时由于外界因素造成的一般性异常,具体如下:
● java.lang.ClassNotFoundExeption:没有找到具有指定名称的类异常。
● java.lang.FileNotFoundException:访问不存在的文件异常。
● java.lang.IO Exception:操作文件时发生的异常。
● java.sql.SQL Exception:操作数据库时发生的异常。
Java编译器要求Java程序必须捕获或声明所有受检异常。如FileNotFoundException、IO Exception等。因为,对于这类异常来说,如果程序不进行处理,可能会带来意向不到的结果。而非受检异常可以不做处理,因为这类异常很普遍,若全部处理可能会对程序的可读性和运行效率产生影响。