完整教程:【JAVA】【BUG】经常出现的典型 bug 及解决办法

news/2025/10/2 8:35:37/文章来源:https://www.cnblogs.com/lxjshuju/p/19123179

前言

偶然想到,作为每个入门后端 java 程序员,都会经历各种各样的 bug 问题,那么收集了一下比较经常出现的典型 bug 及其解决方法,供给想入门的新友作为参考与学习,老友呢,加深印象更加熟悉!~ 我们开始吧!

目录序号

  1. 空指针异常(NullPointerException)
  2. 数据库连接未关闭
  3. 线程安全问题
  4. 内存泄漏
  5. 字符串拼接性能问题
  6. 未处理异常
  7. 不当使用集合
  8. 无限递归
  9. 日期格式化线程安全问题
  10. 序列化问题
  11. SQL 注入
  12. 锁粒度问题

1. 空指针异常(NullPointerException)

这是最为常见的错误。当对值为null的对象调用方法、访问属性或者进行其他操作时,就会触发该异常。

String str = null;
int length = str.length(); // 此处会抛出NPE

解决方法

  • 运用Objects.requireNonNull()方法。
  • 借助Optional类来处理可能为null的情况。
  • 进行null值检查。

2. 数据库连接未关闭

要是数据库连接使用完毕后没有及时关闭,会造成连接资源的浪费,严重时可能引发连接池耗尽的问题。

Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
// 缺少关闭资源的代码

解决方法

  • 采用try-with-resources语句,它能够自动关闭实现了AutoCloseable接口的资源。
  • finally块中关闭资源。

3. 线程安全问题

在多线程环境下,对共享变量进行非原子性操作,或者使用了非线程安全的类,都容易引发数据不一致的情况。

public class Counter {
private int count = 0;
public void increment() {
count++; // 非原子操作,存在竞态条件
}
}

解决方法

  • 运用synchronized关键字、ReentrantLock或者原子类(如AtomicInteger)。
  • 优先使用线程安全的集合,像ConcurrentHashMap

4. 内存泄漏

长生命周期的对象持有短生命周期对象的引用,会使短生命周期对象无法被垃圾回收,从而造成内存泄漏。

public class Cache {
private static final Map<String, Object> cache = new HashMap<>();public static void add(String key, Object value) {cache.put(key, value);// 缺少移除机制}}

解决方法

  • 为缓存设置合理的过期策略,例如使用LinkedHashMap实现 LRU 缓存。
  • 及时释放无用的资源,如监听器、连接等。

5. 字符串拼接性能问题

在循环中使用+进行字符串拼接,会产生大量的临时对象,降低性能。

String result = "";
for (int i = 0; i < 1000; i++) {
result += i; // 性能较差
}

解决方法

  • 使用StringBuilder(非线程安全场景)或者StringBuffer(线程安全场景)。

6. 未处理异常

捕获异常后不进行任何处理,或者直接吞掉异常,会掩盖潜在的问题。

try {
// 可能抛出异常的代码
} catch (IOException e) {
// 空实现,未记录日志或处理异常
}

解决方法

  • 记录异常日志。
  • 向上抛出合适的异常。
  • 提供默认处理逻辑。

7. 不当使用集合

在需要唯一元素的场景中使用ArrayList,导致重复元素出现;或者在需要有序集合时使用HashMap

List<String> list = new ArrayList<>();list.add("a");list.add("a"); // 允许重复元素

解决方法

  • 根据具体需求选择合适的集合类型,如SetTreeMap等。

8. 无限递归

递归方法缺少终止条件,或者终止条件不满足要求,会导致栈溢出错误(StackOverflowError)。

public void recursiveMethod() {
recursiveMethod(); // 缺少终止条件
}

解决方法

  • 确保递归方法有明确的终止条件。
  • 考虑使用迭代替代递归。

9. 日期格式化线程安全问题

SimpleDateFormat不是线程安全的类,在多线程环境下共享使用会导致日期解析错误。

private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public static Date parse(String dateStr) {
return sdf.parse(dateStr); // 多线程下不安全
}

解决方法

  • 在每个线程中创建独立的SimpleDateFormat实例。
  • 使用线程安全的DateTimeFormatter(Java 8 及以后版本)。

10. 序列化问题

实现Serializable接口的类没有声明serialVersionUID,可能会导致反序列化失败。

public class User implements Serializable {
private String name;
// 缺少serialVersionUID
}

解决方法

  • 显式声明serialVersionUID
  • 保持序列化前后类的结构兼容。

11. SQL 注入

直接将用户输入拼接 SQL 语句,会导致 SQL 注入攻击。

String sql = "SELECT * FROM users WHERE username = '" + username + "'";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql); // 存在SQL注入风险

解决方法

  • 使用预编译语句(PreparedStatement)。
  • 对用户输入进行严格的参数校验。

12. 锁粒度问题

同步块范围过大,会影响系统性能;而锁的粒度太小,又可能无法保证线程安全。

public synchronized void process() {
// 包含大量非关键操作,锁粒度太粗
}

解决方法

  • 缩小同步块的范围。
  • 采用细粒度的锁,如ReentrantLock

总结

要减少 Java 后端开发中的错误,关键在于养成良好的编程习惯,比如:

  • 进行严格的输入校验
  • 合理处理异常
  • 做好资源管理
  • 重视代码审查
  • 编写全面的单元测试

文章小尾巴

文章写作、模板、文章小尾巴可参考:《写作“小心思”》
  感谢你看到最后,最后再说两点~
  ①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
  ②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
我是南方者,一个热爱计算机更热爱祖国的南方人。
  (文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python人网站开发案例服务商平台支付宝

来源&#xff1a;亿欧根据全球领先的信息技术研究与顾问公司Gartner的预测&#xff0c;人工智能&#xff08;AI&#xff09;产生的全球商业价值预计将在2018年达到1.2万亿美元&#xff0c;比2017年增长70%。此外&#xff0c;Gartner预计到2022年&#xff0c;人工智能衍生的商业…

网站建设更新维护工作企业网站制作的公司

Redis是什么&#xff0c;优缺点&#xff1f; Redis本质是一个K-V类型的内存数据库 纯内存操作&#xff0c;每秒可处理超过10w的读写操作 优点&#xff1a; 读写性能极高 非阻塞IO 单线程 支持持久化 支持事务 数据结构丰富 缺点&#xff1a; 容易受到物理内存的限制 主机宕机可…

读人形机器人28智慧城市2

读人形机器人28智慧城市1. 智慧城市 1.1. 智慧城市的概念已成为创新与可持续发展的灯塔 1.2. 在智慧城市景观中发挥核心作用的是由AI驱动的人形机器人,它们无缝融入人们的日常生活 1.3. 是城市生态系统中的积极参与者…

浅析 AC 自动机

哈喽大家好,我是 doooge,今天来点大家想看的东西啊。 \[\Huge \sf 浅析~AC~自动机 \] 前置知识:Trie,不需要 KMP。1. AC 自动机的构造与匹配 所谓 AC 自动机,是结合了 Trie 和 KMP 思想的自动机,简单来说就是一个…

实用指南:谷歌官方 Chrome DevTools MCP 正式发布

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025百度官网认证作用代理商推荐,北京益百科技通过官网认证,助力企业优化搜索排名,提升用户体验,降低营销成本

在当今数字化时代,互联网已成为企业宣传推广的主阵地。北京益百科技有限公司作为一家致力于为企业提供互联网解决方案的专业公司,自2014年与百度携手合作,成为北京地区百度信誉“首批独家”授权服务商以来,凭借其丰…

实用指南:Linux(操作系统)文件系统--对打开文件的管理

实用指南:Linux(操作系统)文件系统--对打开文件的管理pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

南昌建设局网站查询塔吊证怎么查网络优化工程师的工作内容

下载安装 下载地址: https://download.csdn.net/download/yijianxiangde100/88496463 安装apk 即可。 证书配置:

dede鲜花网站模板下载境外公司注册代理机构

前言 第11章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于10大管理的内容&#xff0c;学习要以教材为准。本章上午题分值预计在15分。 目录 11.13 制定预算 11.13.1 主要输入 11.13.2 主要输出 11.14 规划质量管理 11.14.1 主要输入 11.14.2 主要工…

上海营销型网站建设公司电商erp软件

语法上的小trick 构造函数 虽然不写构造函数也是可以的&#xff0c;但是可能会开翻车&#xff0c;所以还是写上吧。&#xff1a; 提供三种写法&#xff1a; ​ 使用的时候只用&#xff1a; 注意&#xff0c;这里的A[i]gg(3,3,3)的“gg”不能打括号&#xff0c;否则就是强制转换…

VMware ESXi 9.0.1.0 发布 - 领先的裸机 Hypervisor

VMware ESXi 9.0.1.0 发布 - 领先的裸机 HypervisorVMware ESXi 9.0.1.0 发布 - 领先的裸机 Hypervisor Standard (标准版)、Dell (戴尔)、HPE (慧与)、Lenovo (联想)、IEIT SYSTEMS (浪潮信息)、H3C (新华三)、Cisco…

VMware vSphere 9.0.1.0 发布 - 企业级工作负载平台

VMware vSphere 9.0.1.0 发布 - 企业级工作负载平台VMware vSphere 9.0.1.0 发布 - 企业级工作负载平台 ESXi 9.0 & vCenter Server 9.0 | vSphere 9.0 请访问原文链接:https://sysin.org/blog/vmware-vsphere-9/…

《索引实战:结构与场景解析》 - 详解

《索引实战:结构与场景解析》 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

阿里云无影发布首个Agentic Computer形态的个人计算产品 - 详解

阿里云无影发布首个Agentic Computer形态的个人计算产品 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

响应式网站开发的wordpress 编辑器 空白

事实上&#xff0c;并不是我故意想成为一个困难的候选人。毕竟&#xff0c;在我加入这份工作后&#xff0c;我是一名同事&#xff0c;但面试官的角色是&#xff0c;如果高级面试官一般都是一样的话。 如果你在这里写&#xff0c;我担心一些想面试的朋友会害怕。如果他们有很强…

完整教程:iOS App 上架流程详解,苹果应用发布步骤、App Store 审核规则、ipa 文件上传与测试分发实战经验

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Hadoop完全分布式配置 - 实践

Hadoop完全分布式配置 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

VMware Cloud Foundation Automation 9.0.1.0 发布 - 私有云自动化平台

VMware Cloud Foundation Automation 9.0.1.0 发布 - 私有云自动化平台VMware Cloud Foundation Automation 9.0.1.0 发布 - 私有云自动化平台 VMware Cloud Infrastructure - VCF Automation 请访问原文链接:https:/…

VMware Cloud Foundation Operations 9.0.1.0 发布 - 私有云运维管理

VMware Cloud Foundation Operations 9.0.1.0 发布 - 私有云运维管理VMware Cloud Foundation Operations 9.0.1.0 发布 - 私有云运维管理 VMware Cloud Infrastructure - VCF Operations 请访问原文链接:https://sys…

VMware Cloud Foundation Operations for Networks 9.0.1.0 发布 - 云网络监控与分析

VMware Cloud Foundation Operations for Networks 9.0.1.0 发布 - 云网络监控与分析VMware Cloud Foundation Operations for Networks 9.0.1.0 发布 - 云网络监控与分析 VMware Cloud Infrastructure - VCF Operatio…