Java核心技术——异常和调试

一、处理异常
1.异常处理的两个目标:要么让应用回到安全的状态,并能让用户进行其他操作;要么让用户手动保存或者自动保存用户的所有工作,并顺利终止程序
2.如果一个方法抛出异常,那么调用这个方法的代码也会从这一点终止正常执行而去寻找相应的处理器,如果有,则进入相应的处理器,如果没有,则向更高一层方法抛出这个异常,以此类推
3.所有的异常都是由Throwable继承而来,下一层分解为Error和Exception两个分支,Exception下一层又分为IOException和RuntimeException
4.Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误,程序不应该抛出此类对象。出现这样的内部错误,应使程序安全地终止
5.RuntimeException包含3种情况:错误的类型转换、数组访问越界、访问空指针
6.IOException包含3种情况:试图在文件尾部读取数据、试图打开一个错误格式的URL、试图根据给定的字符串查找Class对象,而字符串表示的类并不存在
7.派生于Error类或RuntimeException类的所有异常称为未检查异常,所有其他异常称为已检查异常。对于已经查异常需要提供异常处理器,而未检查异常则不需要
8.如果子类覆盖超类的一个方法,子类方法中声明的已经查异常不能超过超类方法中声明的异常范围,如果超类不抛出异常,子类也不能抛出异常


二、捕获异常
1.通过catch处理能够在当前方法层面处理的异常,而抛出不能在当前方法层面处理的异常由更高层面的方法来处理,此时方法需要声明可能抛出的异常
2.如果finally子句包含return语句,则finally子句的返回值会覆盖原始的返回值
3.printStackTrace对异常的定位和解决非常重要


三、使用异常机制的建议
1.异常处理不能代替简单的测试
2.不要过分地细化异常
3.利用好异常的层次结构,让异常的类型和描述都尽可能准确地表示到底发生了什么问题
4.不要羞于传递异常,要找最合适的地方进行处理


四、调试
1.建议为必要的类提供toString方法,以便debug
2.对于简单的应用来说,为类添加main方法来提供一种简单的单元测试是非常有效的。对于复杂的应用,使用单元测试工具JUnit
3.利用Throwable类提供的printStackTrace方法,不一定要通过捕获异常来生成堆栈跟踪,只要在代码的任何位置插入 Thread.dumpStack(); 就可以获得堆栈跟踪
4,想要观察类的加载过程,可以用 -verbose 标志启动Java虚拟机,显示类的加载过程,有利于诊断由于类路径引发的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值