作为 Java 开发人员,我们会遵循一系列的编码风格和开发习惯。习惯使然是一方面,另一方面,我们也从不停下脚步质疑这些习惯。一段时间以后,笔者养成了一些不同于常人的编码风格和开发习惯。当第一次了解到这些编码风格时,笔者感到又惊又气。但是,花了一段时间践行这些习惯之后,笔者意识到它们的确能造就更加简洁可控的代码库,同时也让开发者更加省心。
不要因这些想法的另类而否定它们,笔者建议你用几周时间尝试其中的一两条,如果你仍然不喜欢它们,换回以前的代码风格也用不了多久时间。
零注释(公共 API 除外)
笔者一度认为业内对于零注释这种编程习惯已经达成共识,但是当与许多同事合作之后,笔者发现事实并非如此。所以,让我们再次探讨这个问题:无注释。注释很快就会与代码脱节。假如你在一段代码的上面写了行注释,谁也不能保证下一个修改代码的人会更新注释。根据笔者的开发经验,没人会更新注释。原来的代码段可能被删除,业务需求也可能改变。因此,你的注释往往弊大于利。
对此,有个简单的解决方案,就是写自记录代码(self documenting code)。对变量、对象或者函数等进行命名时,选择能清晰表达其用途的名字。假如不够清晰,你需要对它们进行重构,将之拆分为更简洁的形式。只要能直观地表达其用途,过长的名字也无需担忧。别忘了编辑器有自动填写功能,没人需要敲出整个标识符的名字。
然而,公共 API 是一个明显的例外。假如你正在建立一个准备公开发版的库,那还是使用简洁的方法名比较好。不过, Javadoc 对这种情况大有裨益,但也仅限此情况。
不要用 “Test” 为测试方法开头
确实没有必要这么做。你写的方法会注释为测试,方法所在的类也存在于测试包中。明眼人都知道那是测试。其实,测试方法名应该明确指出测试的内容与条件。例如, “reversesTheWordRandomToModnar()”或者“adds70ToBalanceOf100ToMakeBalanceOf170()”,这些名字都准确表达了测什么功能以及预期的结果。
如果你正在使用 IntelliJ ,有一款特别棒的插件叫做 Enso 。它可以将测试名转化成一个句子,一目了然地显示测试的内容。这意味着当你在注视任何类的时候, Enso 都会展示其说明文档。
不要使用@Override
这个观点争议颇多,请听笔者说完。假如你不使用 @override ,最坏的结果就是你重写了一个函数,而调用时执行的却是原版函数,而非重写的版本。值得庆幸的是,在测试驱动开发模式下,测试整段代码时就会定位到这个 bug 。这让 @Override 成了一段冗余的代码。显然,冗余的代码不仅没有好处,还会让人分心。因此,停止使用 @Override ,而依赖 TDD(测试驱动开发)。
不要使用 getX()/setY() 这样的函数名
这确实让人不由得感到恼火。 getXXX 和 setXXX 这种命名方式是 Javabeans 时代的前朝遗物。而 JavaBeans 时代早已过去,这种命名方式也不再适用了。后者让代码变得令人反感却没有带来什么好处。去掉 get/set 这类关键字有利于字段名称的简洁。例如, car.engine() 函数将生成一个引擎对象,而 car.engine(new v8()) 将引擎设置为新的型号。如果需要读取多层级内的对象(例如:car.lights().frontLeft() 对比 car.getLights().getFrontLeft()),前者依旧表达清晰而且代码更加简洁。这个编程习惯笔者一开始也很反对,后来逐渐改变了看法,现在非常热衷这一风格。
可运行的代码>高性能的代码
这段内容和代码风格关系不大,而是更加泛泛而谈。每次看到人们为了一个问题,精雕细刻地设计解决方案,花费大量的时间,笔者都会感到不悦。其实,在最基本的层面上解决问题然后测试性能。十有八九,这类方案都是高速,可扩展或符合其他时髦概念的。相反,笔者经常看到人们设计了一个复杂的缓存解决方案,结果没有提高性能却把代码弄成一团乱麻。解决问题时,先实施你能采取的最基本方案,然后再进行优化。最起码,这种方式能让你有实例证明问题已经解决。
使用自己的异常类型
笔者又一次错误地认为这一开发习惯是业内的共识。 Java 中的检查性异常 (Checked exceptions) 很糟糕,几乎所有其他编程语言(例如C#)都意识到了这一点,所以它们甚至没有这个类型。在笔者编写的任何应用程序中,都会创建自己的异常类型,在这些应用程序中抛出的任何异常都会用笔者创建的异常类接住,然后抛出运行时异常。这让代码更加整洁(笔者从未在程序中抛出大量 XXXException ),也意味着笔者能通过 log 追朔异常来自代码的哪一部分或者这是完全出乎意料的异常类型。
(编译自:https://dzone.com/articles/upgrade-your-code-conventions-2)
OneAPM 为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客。
本文转自 OneAPM 官方博客
相关推荐
### Java编程规范详解 #### 重要性 编程规范在软件开发过程中扮演着至关重要的角色,尤其是在团队合作的环境中。良好的编程规范能够确保代码的一致性和可读性,从而提高开发效率,减少错误,便于后期的维护和升级...
下面将根据这个主题,详细阐述一些重要的Java编程规范。 1. **命名规则**:Java中的命名应遵循一定的规则和约定,例如,类名使用首字母大写的驼峰式命名(如`ClassName`),方法名和变量名使用小写字母开头的驼峰式...
- 遵循Sun/Oracle的Java编程规范,如异常处理、资源管理、并发控制等方面的最佳实践。 - 使用适当的访问修饰符,保护类和成员的可见性。 - 避免硬编码,使用常量或配置文件存储可变信息。 以上是编程规范的简要...
编程规范通常涵盖命名约定、注释规则、代码结构、错误处理等方面,而范例则提供了具体的代码实现方式和设计模式。 1. **命名规范**: - 变量名和函数名应具有描述性,避免使用单个字符或无意义的缩写。 - 类名...
- **C#编码规范**:遵循Microsoft的C#编程指南,如命名约定、注释、代码组织和异常处理。 - **面向对象编程**:充分利用接口、抽象类和继承,实现代码解耦和模块化。 - **.NET框架使用**:理解并合理使用.NET框架...
其次,《编程规范和范例.doc》可能详细阐述了特定编程语言的编程规范,比如C++、Java或Python,并提供了实际代码示例。这份文档可能包括了最佳实践、设计模式、以及避免常见错误的提示。设计模式是解决常见问题的...
Java开发规范是一套指导开发者遵循的标准和约定,旨在提升代码质量、可读性、可维护性以及团队协作效率。规范涵盖了代码组织、风格、注释等多个方面,确保代码的可靠性和一致性。 **1. 开发规范的目的与范围** 1.1 ...
### Java技术手册(第6版)关键...通过以上概述,《Java技术手册》(第6版)不仅为有经验的Java开发人员提供了深入理解和掌握Java 7和Java 8的关键知识点的机会,同时也为初学者提供了全面而系统的Java编程学习路径。
Java接口是面向对象编程中的一个重要概念,它通过定义一组抽象行为规范来提高代码的复用性和灵活性。掌握接口的使用对于理解和编写高质量的Java代码至关重要。通过本篇文章的学习,相信您已经对Java接口有了深入的...
1. Spring框架:Spring是Java企业级应用的基石,它提供了一个全面的编程和配置模型,旨在简化开发过程。Spring的核心特性包括依赖注入(DI)和面向切面编程(AOP)。依赖注入允许开发者将对象的创建和管理交给Spring...
Java及Android编码规范的制定旨在提升软件编程风格的一致性,增强源代码的可读性、可靠性和可重用性,确保开发团队间的工作交接顺畅,减少理解现有代码所需的时间,从而优化后续的维护和升级过程。这不仅提高了软件...
Java开发技术培训PPT课件主要涵盖了从Java的基础知识到高级特性的全面讲解,以下是根据提供的部分...通过这个PPT课件,学习者将全面了解Java开发技术,从基础知识到实际应用,为成为一名合格的Java开发者打下坚实基础。
接口在这里指的是一种规范或者约定,它定义了某种服务或功能的“怎么做”和“是什么”。面向接口编程的魅力在于它使得软件系统更加灵活、易于扩展、易于维护,并且能够在不修改现有代码的基础上引入新的实现。 文章...
本文主要关注Java编程语言中的代码规范和最佳实践,旨在提高代码的可读性、可维护性和安全性。以下是一些核心知识点: 1. **命名规范**: - 命名应清晰、具有描述性,能够准确反映变量、函数或类的作用。 - 遵循...
- **Java**:Java是一种广泛使用的面向对象的编程语言,具有平台无关性、可移植性强等特点,非常适合用来开发企业级应用系统。 #### 3. 框架 - **SpringBoot**:SpringBoot是基于Spring框架的一种简化版,它使得...
开发者可能按照Maven的约定,将代码组织为src/main/java(业务代码)、src/main/resources(资源配置)、src/main/webapp(Web应用目录)等结构。 综上所述,这个私人牙科诊所管理系统运用了SSM框架,实现了对牙科...
总的来说,QQ用户管理系统是一个综合性的项目,涵盖了数据库设计、Java编程、JDBC使用、编码规范以及文档编写等多个方面,旨在锻炼开发者实际解决问题的能力和代码组织能力。通过这个项目,开发者不仅可以提升数据库...
类可以实现一个或多个接口,从而承诺遵循这些方法的约定。这使得代码具有更好的可扩展性和可维护性,因为接口定义了公共行为,而具体的实现可以在不同的类中独立变化。 其次,接口有助于实现多继承。在许多编程语言...
本案例将深入探讨一个以JSP(JavaServer Pages)为基础,结合SSM(Spring、SpringMVC、MyBatis)框架,并可升级至SpringBoot的宠物交易平台的源码设计与实现。这个项目不仅提供了源码实例,还体现了现代Web开发的...