Practical Java笔记四:绝对不可轻忽异常
当Java程序产生异常,你能做些什么呢?
1.捕捉并处理它,防止它进一步传播(propagate)。
2.捕捉并再次抛出它,这么一来它会被传播给调用端。
3.捕捉它,然后抛出一个新异常给调用端。
4.不捕捉这个异常,听任它传播给调用端。
如果你在开发初期不知道如何应付异常,至少要像下面这样做:
public void m1(){ //... try{ }catch(FileNotFoundException fnfe){ System.out.println(fnfe+"caught in method m1"); LogException(fnfe); } }
这种做法至少提供了一些输出,以及一份日志文件(logfile),用来记
录程序曾经发生过异常,也让你知道程序存在一些问题。这种技术也可以
用来提醒你,异常已经出现而且暂时没有适当的回复机制。日后你可以依
据日志文件内的记录找到相应代码,插入合适的异常处理句。注意,你必
须提供LogException(),它只需将异常信息写入文件就行了。
这种做法的缺点是:日志文件仅仅包括测试时发生的异常,无法记录未发
生的异常。所以当某次测试过后,即使对日志文件的所有内容都处理完毕,
也并不就意味你已经完全清理好了你的程序。日志文件仅仅只用来显示你
在测试过程中获得的异常而已。
如果想要发现测试过程中未曾发生的异常,则必须查找整个程序源码,
LodException()或其他作为注释的标记(tag)。这是确保你不需要使用简
陋的println()语句的惟一办法;那个语句所在之处应该代之一适当的异
常处理代码。
另一个有效做法是使用printStaticTrace( )。这个函数提供被抛异常的
消息,以及该异常的起源(以stack trace方式呈现),并将它们输出到
标准错误串流(standarderrorstream。译注:通常是屏幕)。以此做法
修改代码,获得的结果是:
public void m1(){ //... try{ }catch(FileNotFoundException fnfe){ System.out.println(fnfe+"caught in method m1"); fnfe.printStackTrace(System.err); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述