1. 如何显示异常信息
前面介绍了各种异常类及异常语句的用法。在实际编程过程中,还需要显示导致异常出现的信息,方便程序员根据给出的异常信息查找程序错误。异常类提供了输出异常信息的两个方法:getMessage方法和printStackTrace方法。
getMessage方法
用于获取异常的详细消息字符串。
printStackTrace方法
输出Throwable对象的堆栈跟踪信息到控制台。
在catch中声明的异常对象catch(Exception ex)封装了异常事件发生的信息,在catch语句块中可以使用这个对象的getMessage方法获取错误信息。
getMessage的使用方法示例如下:
运行代码,因为被零除,所以发生异常,输出/ by zero。
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语句块中,打印一条语句。
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容