java输出异常信息_跟我学java编程—Java显示异常信息与异常分类

1. 如何显示异常信息

前面介绍了各种异常类及异常语句的用法。在实际编程过程中,还需要显示导致异常出现的信息,方便程序员根据给出的异常信息查找程序错误。异常类提供了输出异常信息的两个方法:getMessage方法和printStackTrace方法。

getMessage方法

用于获取异常的详细消息字符串。

printStackTrace方法

输出Throwable对象的堆栈跟踪信息到控制台。

在catch中声明的异常对象catch(Exception ex)封装了异常事件发生的信息,在catch语句块中可以使用这个对象的getMessage方法获取错误信息。

getMessage的使用方法示例如下:

39da69b0c269c59153c44c2b27eb5646.png

运行代码,因为被零除,所以发生异常,输出“/ by zero”。

printStackTrace的用法示例如下:

41c9ff3a52efd036463dd5086803925b.png

运行上述代码,输出结果如下下图所示:

f14ffae3a02a912c50240dbf95b623cc.png图 13-11 printStackTrace输出结果

使用printStackTrace方法可以获取异常的具体类型,这样就可以在使用throw是抛出一个确切的异常。

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等。因为,对于这类异常来说,如果程序不进行处理,可能会带来意想不到的结果。而非受检异常可以不做处理,因为这类异常很普遍,若全部处理可能会对程序的可读性和运行效率产生影响。

3. 自定义异常类

尽管Java提供了众多的异常类,但程序员有时可能需要定义自己的异常类来处理某些问题。例如,可以抛出中文文字的异常提示信息,帮助客户了解异常产生的原因,在这种情况下用户只要定义一个或直接或间接继承Throwable的类就可以了。一般情况下,自定义的异常类都选择Exception作为父类。直接继承Exception类的异常属于已检查异常,所以必须进行相应的处理。

■ 知识点拨

对于初学Java开发的读者来说,并不是对所有的方法都有进行异常处理,因为异常处理要占用一定的资源,影响程序的执行效率。

■ 思考与练习

编写一个ExceptionTest类,在main方法中使用try、catch、finally语句,要求:

(1)在try语句块中,编写被零除的代码;

(2)在catch语句块中,捕获被零除所产生的异常,并且打印异常信息;

(3)在finally语句块中,打印一条语句。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值