这样的错误以前我也犯过,也见过不少人这样的写法!下面我也举个例子:


















上面是个简单的方法,代码中有个隐藏的bug。我在维护一个系统的时候就遇到类似的代码,实际中类似的BUG隐藏
的更深!在对系统业务和代码不是很很熟悉的情况下,我推荐如下写法:
1
public void writeFile(File f) {
2
String content = null;
3
try {
4
byte[] b = new byte[1024];
5
FileInputStream in = new FileInputStream(f);
6
in.read(b);
7
content = new String(b);
8
} catch (Exception e) {
9
content="";
10
//如果异常发生的话,content可能为空
11
//下面对content的操作就有可能发生NullPointerException异常
12
System.out.println(e.getMessage());
13
}
14
//下面操作有可能发生NullPointerException异常
15
if (content.indexOf("hello") > -1) {
16
System.out.println("yes");
17
} else {
18
System.out.println("no");
19
}
20
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

一般来说异常处理不推荐直接system.out.println打印出来!
几条建议:
如果无法处理某个异常,那就不要捕获它。
☆ 如果捕获了一个异常,请不要胡乱处理它。
☆ 尽量在靠近异常被抛出的地方捕获异常。
☆ 在捕获异常的地方将它记录到日志中,除非您打算将它重新抛出。
☆ 按照您的异常处理必须多精细来构造您的方法。
☆ 需要用几种类型的异常就用几种,尤其是对于应用程序异常。
☆ 把低层次的异常封装成层次较高程序员较容易理解的异常。
☆ 尽量输出造成异常的完整数据
☆ 尽量捕获具有特定含义的异常:比如SqlException,而不是简单地捕获一个Exception
希望对大家有帮助!
参考:
http://www.blogjava.net/usherlight/archive/2006/10/23/76782.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述