博客

如何预防常见的 Java 错误

February 2, 2022
Wander Neto
俯瞰视角,三个人坐在那里,膝上放着笔记本电脑,正在敲击键盘。

成为更高效的 Java 开发人员

Java (Oracle Corporation) 全球拥有 900 万开发人员*,是世界上最流行的编程语言之一。许多应用程序框架都是基于 Java 构建的,因为它是一种非常通用的语言,可以在许多支持 Java 运行时环境 (JRE) 的不同设备上运行程序,而 JRE 正是所有 Java 程序的运行环境。由开发人员主导的社区非常活跃,为新程序员提供的深入支持也促成了其日益增长的普及度。

由于 Java 问世已久,社区花费了多年时间来制定标准、工具、编码模式,并减少开发人员反复遇到的常见错误。所有这些由社区主导的举措都有一个共同目标——帮助开发人员在利用 Java 开发应用程序时尽可能提高效率。但在应用最佳实践或模式时,责任在于开发人员自身。由于对良好实践的执行标准各不相同,且社区内部观点分歧较大,因此很难形成统一的编码实践方法。开发人员往往求助于在线社区,但这有时会无意中导致他们获得不安全的编码解决方案。

为了帮助开发人员针对常见的 Java 编码问题实施安全解决方案,我们创建了 Sensei——这是一款 IntelliJ 插件,旨在根据您或您的组织在专业环境中定义的方案(或规则)来纠正不良编码模式。Sensei 使开发人员能够一键识别并纠正常见的 Java 错误(陷阱)。

继续阅读,了解 Sensei 如何通过解决一些常见的 Java 编码错误来提高开发人员的生产力。

一个让开发人员倍感挫败的反复出现的错误

这些常见错误的一个例子是对包装器值进行错误的相等性检查。应使用 equals 方法而不是引用比较运算符 (==) 来比较装箱后的基本类型值,以防止出现意外结果。

例如,对 -128 到 127 范围内的 Integer 值使用引用比较运算符(通常)其表现与 equals 方法相同。然而,如果我们对该范围之外的值执行相同的比较,结果就会不同。这是因为 Java 为上述范围的 Integer 值维护了一个常量池。使用 equals 方法将始终产生预期的结果,因此这是比较的正确方式。

在此示例中,我们错误地使用了运算符 (==) 来检查相等性。

其结果如下:

true

false

false

true

正确的比较方式是使用 equals 方法。

此时输出结果为:

true

false

true

false

这一广为人知的最佳实践由来已久,但在遗留代码中却常被错误地实现,往往在最不合时宜的时候引发问题。因此,我们创建了各种方案(或规则),利用 Sensei 帮助您在本地识别此类不良编码模式,并实现一键修复。

Sensei 是一款高度可定制的 IDE 插件,可在您编写代码时扫描并修复不良代码。它内置了数百种可下载的代码转换和迁移方案(规则),并支持您自行创建。借助 Sensei,开发人员可以在编写代码时即时修复不良模式,从而更快地交付高质量代码,并最终在团队和项目中实现统一、标准的编码方式。

Sensei 如何修复常见的 Java 问题

由于 Sensei 允许您创建自己的方案,我们编写了一个方案来纠正上述错误。

在此示例中,我们要查找在装箱基本类型中使用比较运算符 (==) 的位置。

Sensei 方案如下(YAML 格式):

上述方案可以在您输入代码时、在整个文件、配置范围内,甚至在整个代码库中搜索反复出现的不良模式。一旦发现该模式,下一步自然是能够立即修复它,而无需在线搜索。Sensei 使您能够创建修复程序,按指定方式添加、编辑或删除代码。您甚至可以根据需要提供多种修复方案,让开发人员选择最合适的一种。

在我们的示例中,我们希望使用 equals 方法重写比较逻辑,而不是使用 (==) 运算符。

可用的修复方案描述如下:

工作原理:

Java code defining Comparison class with method comparing two Integer objects using == operator.

轻松实现标准编码指南

Java Gotchas Cookbook 包含 22 种方案,可帮助您避免常见错误,保持代码整洁安全。它能检测到对各种 Java 语言特性和 API(如对象相等性、异常处理、正则表达式和集合)的不正确或不安全使用。通过采用 Sensei 和此手册,您可以从一开始就编写更好的代码,甚至可以创建适合您团队、项目或组织的专属方案。

这只是 Sensei 用于标准化项目众多方式中的一种。您可以随时留意在代码审查或日常编码中经常遇到的反模式或某些手动代码转换。如果您有一套开发人员经常忽略的编码指南,可以将这些指南转换为方案,使开发人员能够自信地应用经批准的代码转换。

立即安装 Sensei 并启用 Java Gotchas Cookbook,获得高效的开发体验。 https://sensei.securecodewarrior.com/cookbooks/scw:java

*2021 年,开发者国家状况报告,https://www.developernation.net/developer-reports/de20

‍

标语

在 AI 驱动的开发成果发布前实现有效治理

评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。

预约演示
资源库

探索更多博客

获取有关安全编码、人工智能治理和软件风险管理的专家内容。

浏览全部
案例研究
筛选标签
这是 div 块中的一段文本。

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

统一的安全文化:Sage 如何打造其安全倡导者项目

了解 Sage 如何通过灵活且以关系为导向的方法提升安全性,成功培养了 200 多名安全倡导者,并实现了显著的风险降低。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

2026年网络安全意识月:理解人工智能安全对企业防御至关重要

目前,大多数顶级人工智能公司已公开呼吁全球放缓人工智能的发展速度,以便安全防护措施能够跟上步伐。然而事实是,严重的安全问题已经显现。随着人工智能实施带来的经济成本和风险不断累积,无数安全领导者和高管团队正处于紧迫的境地。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

赋能要素 8:打造项目品牌

成功的安全编码项目不仅需要优质的内容。赋能要素 8 展示了如何通过品牌化将参与过程转变为一种令人向往、以地位为驱动的体验。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

每一位员工现在都处于 AI 网络安全的最前线

企业技术格局正以一种鲜有人预料到的速度发生剧变,直到为时已晚。我们已正式跨越了从人工编写代码和基础辅助编程,进入“智能体开发生命周期”(ADLC)的时代。虽然自主 AI 智能体有望在多个职能领域实现前所未有的效率,但它们也带来了全新的安全和监管风险。

了解更多

在产品发布前确保 AI 驱动的开发安全

洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。

预约演示
未找到相关项目。