首页 > 编程语言 >不可错过!12个编写整洁Java代码的最佳实践方法

不可错过!12个编写整洁Java代码的最佳实践方法

时间:2023-08-08 18:34:39浏览次数:38  
标签:12 Java 原则 可读性 代码 编写 整洁

在软件开发领域摸爬滚打了这些年之后,通过与各类开发者合作,审查他们所编写的代码所累积的经验,使飞哥对整洁代码的理解和认识有了本质的提升。

引用《代码整洁之道》中的一段话,实际上,我们花在阅读代码上的时间远远超过编写代码的时间,这个比例甚至超过10比1。在我们致力于编写新代码的过程中,我们不可避免地要阅读旧的代码。因此,要使代码容易编写,首先就要保证代码易于阅读。

无论你是老练的软件开发者还是刚入行的新手,我相信你都会体会到学习和继承新的代码库所需要付出的困难和努力。你需要深入理解这个代码库的结构、功能、编程语言、所使用的库、框架以及其他相关技术。

当你面对一段陌生的代码,或是很久以前写的代码时,可能会感到难以理解。不论你是想修复错误、增加功能、提升性能,还是加入一个正在进行的项目,代码的整洁程度决定了你需要投入的时间和精力。

遵循整洁的Java代码原则编写代码可以节省大量的时间,并减少挫败感。相反地,处理混乱的代码可能需要花费大量时间来理解逻辑、解读无注释的部分以及搞清楚那些命名不清的变量。

那么究竟什么是整洁代码?我们为什么要编写整洁代码呢?

整洁的代码必须是直观、易于阅读、可测试和易于理解的。它还应该遵循良好的编码规范和最佳实践,以提高代码的可读性、简洁性、组织性和可维护性。此外,整洁的代码还应该避免bug、无用的复杂性、代码的异味以及重复代码的问题。

RobertC.Martin被大家亲切地称为UncleBob,他是整洁代码主题的权威。无论你是有经验的程序员还是刚入门,你都可以从他的书籍、文章和讲座中获益关于代码整洁的知识。

他在《代码整洁之道》书中写到:

*“虽然糟糕的代码能运行,如果代码不整洁,可能会导致开发团队效率低下。每年,由于代码质量差而损失的时间和资源是巨大的。然而,这种情况是可以避免的。”

编写整洁的 Java 代码的重要性毋庸置疑。以下是整洁代码带来的一些直接好处:

可维护性 - 整洁的代码便于维护和更新。

调试 - 整洁的代码减少错误,便于隔离和修复问题。

可扩展性 - 整洁的代码具有良好的模块化、可复用性,能更好地适应未来变化。

协作 - 整洁的代码增进团队成员之间对代码的理解。

文档 - 整洁的代码本身就足够清晰,降低了额外注释的需求。

效率 - 通过消除重复和无用的复杂性,整洁的代码能够提高性能。

可读性 - 整洁的代码的阅读性强,有助于降低混淆,增强可维护性。

编写整洁的 Java 代码的最佳实践

作为一种广受欢迎的编程语言,Java具备成熟的特性。许多旧版的Java代码库至今仍在用于运行重要的商业软件和基础架构。这些项目始于十多年前,仍然为大量用户提供服务。 考虑到Java代码库的长寿特性,编写易于后续开发人员维护的整洁Java代码变得极为重要。最近,飞哥在CSDN上看到了一篇国外开发人员的总结,介绍了如何编写整洁的Java代码。于是整理了这些内容,供大家参考。

  1. 遵循标准的项目结构 项目结构涉及如何在项目中组织各类组件,包括 Java 源文件、测试文件、文档文件、构建文件和配置文件。清晰的项目结构能使代码库更易理解、导航和修改。反之,混乱的项目结构可能会在处理大型项目时造成混淆。

  2. 严格遵循 Java 命名规范 Java 命名规范由一系列规则组成,为 Java 开发人员命名变量、包、类和方法提供指导。Java 语言规范包括了这些命名规则。合理的命名能提升代码的可读性、一致性和可维护性。

Java 命名规范主要包括:

 类和接口名以名词形式,首字母大写。  方法名以动词形式。  变量名需简短且有意义。  包名全小写。  常量名全部大写。

  1. 优先考虑可读性,而非可重用性 虽然可重用性在软件开发中备受推崇,并且可以减少开发和维护时间,但当我们处理不熟悉的代码库时,也可能会引发一些潜在问题。在大型应用程序中,可重用性有时会牺牲可读性、可用性和可维护性,特别是在设计不当的情况下。随着代码逻辑流程变得难以理解,可重用性可能会影响代码的可读性。 不易理解的代码会增加调试难度和维护成本,特别是当试图吸引新开发人员加入项目时,这可能成为一项挑战。因此,在开发软件过程中,请确保可读性始终处于首要位置,不要盲目追求可重用性。

  2. 结合静态与动态分析工具审查代码 静态与动态代码分析工具各具优势,共同助力 Java 代码的质量提升。静态分析工具用于审查源代码,确保编码标准的一致遵循,能够在开发阶段就识别出潜在的漏洞和错误。

相对而言,动态分析则聚焦运行时应用程序的表现。它可以评估应用程序的性能、行为和功能,识别运行时的错误、内存泄漏及资源消耗,从而降低在生产环境中出现问题的风险。Digma 是一款出色的运行时代码检查工具,它可以帮助开发人员迅速定位风险代码、潜在错误和复杂代码库中的瓶颈。Digma 通过 OpenTelemetry 收集追踪、日志和指标等数据,并对其进行分析,以提供关于代码的深入洞察。它能识别诸如回归、异常、代码异味等模式,从而使开发人员能够确保更高质量的 Java 代码进入生产环境。

  1. 采用有意义的注释和文档 许多开发人员在软件开发初期,包括我自己,常常会过度使用注释。不适当的注释通常暗示代码编写的不佳。 在编写整洁的 Java 代码过程中,注释和文档的合理运用极为重要。虽然理想的代码应具备自我解释的特质,有时复杂逻辑却无法避免。然而,通过策略性地在代码中加入注释,可以解释某些部分背后不太直观的逻辑。 在 Java 中,开发人员常用两种类型的注释:文档注释和实现注释。前者面向代码库的使用者,后者则面向开发者。

  2. 一致且得当的代码格式化:空白和缩进 代码格式化在个人项目中或处理可能永远不会由他人维护的代码时,可能显得不那么重要。但在团队环境中,保持一致的代码格式化和风格则显得尤为关键。 要在团队中编写整洁的 Java 代码,确保团队和代码库中格式化和编码风格的一致性非常重要。空白和缩进是实现一致编码风格的关键因素。 合适的空白使用,如在运算符、逗号及控制语句周围,可增强代码的可读性。例如,您可以通过空白将代码划分为逻辑分组,从而提高可读性和视觉效果。 缩进是指在循环、方法和控制结构中使用制表符或空格。虽然 Java 没有强制的缩进规范,但选择并坚持使用流行的约定是明智的做法。

  3. 控制方法参数的数量 虽然参数在方法调用中非常重要,但应避免在一个方法中使用过多参数,因为过多的参数数量可能暗示方法处理多于一个关注点,从而违反单一职责原则。 参数过多会降低代码可读性,因为参数的类型和意义可能难以跟踪。为了编写整洁的 Java 代码,你应该限制方法参数的数量,并考虑使用对象或数据结构来替换单个参数或将相关参数组织到对象中。

  4. 利用单元测试与测试驱动开发(TDD) 在软件开发领域,单元测试和测试驱动开发(TDD)是不可或缺的实践手段。单元测试的作用是对各个函数、方法和类的功能进行验证,保证它们能独立完成任务。而 TDD 则是一种优先编写测试再进行开发的方法。 通过采用单元测试和 TDD 方法,您能更加专注于编写规范、简洁的 Java 代码。单元测试可以帮助您及时验证代码的正确性,快速发现潜在错误,并促使您编写更模块化的代码结构。TDD 方法将为您提供及时的反馈,从而提高您编写可靠且易维护代码的信心。

  5. SOLID 原则 SOLID 原则是由 Robert C. Martin(Uncle Bob)所提出,对于所有开发人员来说都非常重要,它有助于编写清晰、可维护和可扩展的代码。

如何通过 SOLID 原则编写高质量的 Java 代码:

单一职责原则(Single Responsibility Principle,SRP):按照此原则,一个类只应担负一项职责,这有助于保证代码的简洁、可读性和维护性。

开放封闭原则(Open/Closed Principle,OCP):该原则要求类应对扩展开放,对修改封闭,除非进行错误修复。这使得您可以在不破坏现有功能的前提下添加新特性。在 Java 中,借助接口或抽象类能实现现有类的功能扩展。

里氏替换原则(Liskov Substitution Principle,LSP):此原则确保您能够在不影响程序正常运行的情况下,灵活地将超类与其各个子类进行互换。遵循这一原则有助于正确使用继承,编写结构松耦合的优雅 Java 代码。

接口隔离原则(Interface Segregation Principle):此原则鼓励选择较小、更具针对性的接口,而非庞大、泛化的接口。这使得您能够编写更加模块化和简洁的 Java 代码,确保实现类仅专注于与其相关的功能。

依赖倒置原则(Dependency Inversion Principle,DIP):依赖倒置原则强调降低组件间的紧耦合,推崇依赖于抽象而非具体实现。遵循此原则,您可以通过控制反转(IoC)和依赖注入实现结构清晰的 Java 代码。

  1. 遵循 KISS 原则和 DRY 原则 KISS 和 DRY 是编程中的基础原则,对于编写精炼的 Java 代码至关重要。DRY 原则主张开发者确保系统中代码不重复,以此提升代码的可维护性,并使查找和修复错误更为高效。 KISS 原则(Keep It Simple, Stupid)则倡导在软件设计和开发过程中保持简洁明了。遵循此原则,你可以消除代码中的不必要复杂性,从而选择更易理解的编码方式。 KISS 原则(Don't Repeat Yourself)有助于增强代码的可维护性和可读性,从而提升团队协作效率,也使新成员更容易融入项目。

  2. 遵循一致的源文件结构 Java 的标准源文件包括运行任何 Java 程序所需的关键组成部分。为了保持代码的可读性,你应当遵循一致的源文件结构。虽然没有普遍适用的源文件结构,但存在一些广受推崇的风格指南。 一般来说,Java 的源文件结构应该从包声明开始,接着是静态和非静态的导入声明,最后定义一个主要的顶级类。

  3. 避免硬编码 硬编码是将值直接嵌入到程序源代码的一种做法,不使用变量表示。对硬编码的值进行更改必须修改程序源代码,这样的做法极大地限制了代码的重用性和可测试性,并可能引发程序错误和代码重复问题。 为了增强代码的重用性、可测试性和可维护性,应该避免在程序源代码中使用硬编码值。这些都是整洁 Java 代码的核心特性。您可以通过使用抽象概念,例如常量变量或枚举,来替换硬编码的值。

标签:12,Java,原则,可读性,代码,编写,整洁
From: https://blog.51cto.com/u_15327851/7011139

相关文章

  • java springcloud 大文件分片上传处理
    ​ 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。先说下要求:PC端全平台支持,要求支持Windows,Mac,Linux支持所有浏览器。支持文件批量上传支持文件夹上传,且要求在服务端保留层级结构。文件夹数量要求支持到10W......
  • java动态代理
    动态代理代理比较好理解,和现实生活中意思一样。就是我要干一件事情,可以通过代理人或代理平台进行完成,不需要直接和服务方接触。又或者计算机网络上说的代理。为什么叫动态代理?这里回到java程序上,是因为在运行时可以动态的创建接口的实现,通过java的反射进行实现。依赖三个关键类......
  • 4412 使用usb摄像头拍照YUYV格式
    一、内核设置Linux内核中已经带有很完善的USB摄像头驱动,支持几乎所有的USB摄像头,我们只需要配置内核,选择上相应的Sensor型号即可。配置内核,支持USB摄像头:DeviceDrivers---><*>Multimediasupport---><*>VideoForLinux[*]Ena......
  • JavaGuide
    Java基础知识点汇总0.Java语言特性简单易学具有面向对象三大特性:继承、封装、多态平台无关性(由JVM虚拟机实现与平台无关)可靠性安全性支持多线程支持网络编程编译与解释并存与C++相比:都是面向对象的语言,都支持继承封装多态Java不提供指针来直接访问内存,更加安全Jav......
  • 学习Java第16天
    Scanner对象之前我们学的基本语法中文名并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。Java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入基本语法:Scanners=newScanner(System.in)通过Scanner类的ne......
  • JavaScript实现文件夹的上传和下载
    ​ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。ASP.NET页面设计:TextBox和Button按钮。 ​编辑TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button......
  • 跳表及其Java实现
    跳表及其实现参考https://zhuanlan.zhihu.com/p/339750543importjava.util.Objects;importjava.util.Random;importjava.util.Stack;/***参考https://zhuanlan.zhihu.com/p/339750543*/publicclassSkipListPractice{staticclassSkipNode<T>{S......
  • Sqoop 连接mysql 错误 java.lang.NoClassDefFoundError(已解决)
    错误信息Exceptioninthread"main"java.lang.NoClassDefFoundError:org/apache/commons/lang/StringUtilsatorg.apache.sqoop.manager.MySQLManager.initOptionDefaults(MySQLManager.java:73)atorg.apache.sqoop.manager.SqlManager.<init......
  • java heap space解决方法
    在JVM中如果98%的时间是用于GC(Garbage Collection)且可用的Heapsize不足2%的时候将抛出异常信息,java.lang.OutOfMemoryError:Javaheapspace。所以产生这个异样的原因通常有两种:1.程序中出现了死循环2.程序占用内存太多,超过了JVM堆设置的最大值。对于第一种情况,需要自己查看......
  • asterisk-java的测试使用
    asterisk-java的测试使用一个可用于FreePBX的封装库asterisk-java用于asteriskPBX集成的免费Java库。https://github.com/asterisk-java/asterisk-java最新版本为3.39.0<dependency><groupId>org.asteriskjava</groupId><artifactId>asterisk-java</artifactId><......