前言
[本文于2023年7月14日发表于掘金平台]
本篇文章,是我这些年一直从事Java开发中的一些开发经验总结和感悟。希望可以分享给大家,帮助大家少踩坑,少走弯路, 编写高质量的Java代码。Java的世界丰富又多彩,但同时也布满了荆棘陷阱,大家一不小心就可能跌入黑暗深渊,只有在了解了其通行规则后才能使自己在技术的海洋里遨游飞翔,恣意驰骋。
建议1:命名要规范、统一、不要混淆
- 模块名:模块名小写,多个用-隔开。
- 包名:包名全小写,不允许出现复数形式,例如util,类名可使用复数形式XXXUtils。
- 类名:类名首字母大写,使用大驼峰命名法。
- 常量名:常量全部大写并用下划线分隔。
- 变量名:首字母小写,变量采用驼峰命名法(Camel Case)命名等
- 方法名:首字母小写,变量采用驼峰命名法(Camel Case)命名等
- 命名:命名要见名知意,不要取名为:a,b,c,d 、我有一个同事就是因为命名了三个list集合名为:aList、bList、cList,最后自己都不知道是哪一个list了,出现bug。
代码的规范性影响了代码的可读性。
初级程序员和高级程序员的差别往往就体现在这些我们未曾注意的细节里面。
建议2:不要在常量和变量中出现易混淆的字母
不要使用容易混淆的字母,例如:i I 1 l 0 o O,不仔细看,简直傻傻分不清,慎重使用,若要使用也请使用大写,不要单独出现,特别是定义long类型的变量时。
public class Client {
public static void main(String[] args) {
long num = 1l;
System.out.println("num的两倍是:" + (num + num));
}
}
肯定有人会说:这么简单的例子还能出错?运行结果肯定是22!实践是检验真理的唯一标准,将其拷贝到idea中,然后Run一下看看,或许你会很奇怪,结果是2,而不是22?
建议3:写好代码注释
一定要学会写注释,写好注释,注释也并非越多越好。 对于java代码而言,注释的类型有三种: 单行注释:方法中,对代码进行单行说明。 多行注释:方法中,对代码进行多行说明。 文档注释:类上,接口上,方法上等。 对于使用idea的用户而言,可以根据自己的喜好设置live template进行常用代码模板设置。
下面提供一个计算%取余逻辑的代码,仅供参考。
/**
* 取模运算原理:(被除数 除以 除数)得到可以整除的个数
* 个数再乘以除数就表示可以得到的最大数量
* 用除数减去最大个数得到取余后的数量
*
* 将被除数除以除数得到商,然后将商乘以除数得到积。接下来,将被除数减去积,得到最终的取模结果。
* 顺序上:1.被除数 除以 除数 得到商 2.商乘以除数得到积 3.被除数 减去 积 得到余数。
* @param dividend 被除数
* @param divisor 除数
* @return 余数
*/
public int mod(int dividend, int divisor) {
// 计算逻辑:余数 = 被除数 - (被除数 / 除数) * 除数
return dividend - dividend / divisor * divisor;
}
建议4:习惯使用常量值,减少魔法值、
在编写代码的时候会用到一些类似于:1、2、3、4、5、"yyyy-MM-dd HH:mm:ss"这样的常量值,如何任由这样的常量值出现在代码中,会有两个常见的问题:
- 后期再查看这段代码的时候不知道这个数字:1,2,3代表的是什么意思。
- 修改了一处地方,同类型的其它地方没有改到,出现bug。 常量值使用示例:
/**
* 常用时间日期格式:年-月-日 时:分:秒
*/
public static final String BASE_DATE_TIME = "yyyy-MM-dd HH:mm:ss";
可以使用一个常量类来保存这些常量值,使用起来会很方便。
建议5:学会使用OOP(面向对象)的思想编写代码
java本身就是一门面向对象的编程语言,但是我看到很多程序员的代码中还是充满了各种各样的if-else语句。
什么是面向对象编程? 我猜肯定会有很多人会说:封装,继承,多态就是面向对象。这种说法并不完全对,面向对象应该是使用对象进行信息传递的手段。对象与对象之间可以交流和传递信息。
如何熟练的使用面向对象的思想? 可以多学习一下设计模式相关的知识,帮助你更好的使用面向对象的知识。
关于消除if-else代码,从作者这些年的开发经验来看,可以使用如下方法:
- 使用泛型,枚举
- jsr303校验
- Optional类
- 策略模式
- 规则引擎等。
建议6:熟练掌握java基础知识和java提供的工具类
作者曾经有一个同事以前是写PHP语言的,后来因为公司转型以及熟悉业务,从PHP转为java开发。从和他的聊天中得知,他只是学习了一些简单的java知识就匆匆上阵开发,没有系统性的学习java,导致后来的开发中,对java的很多特性不了解,也经常出现相关问题。
所以说要写出高质量的java代码需要对java基础知识要有系统性的知识了解。
比如:基础知识、集合、泛型、枚举、反射、IO流、常用工具、面向对象等知识要有系统性的了解。
在这里笔者举个例: 在java中,对于浮点数(小数)的表示有flat和double,整数和小数是分开表示的,会有精度问题。 可以使用java自带的BigDecimal工具类的加减乘除进行运算。
建议7:熟练使用框架和相关API
熟练使用Java框架有很多好处。首先,框架可以帮助您更快地开发应用程序。它们提供了一种简化代码的方法,使您可以更专注于实现业务逻辑而不是编写重复的代码。
其次,框架可以提高代码的质量和可维护性。它们通常包含错误处理、日志记录和其他有用的功能,这些功能可以帮助您更容易地调试和维护代码。
最后,框架可以帮助您更好地组织和管理项目。它们通常包含项目管理工具,如Git版本控制和Maven构建工具,这些工具可以帮助您更好地管理代码库和依赖项。
后面的内容说的有些宽泛,如果展开讲述可能写一本书都写不完,如果你在平时开发中有什么问题,可以在文章下方留言,大家一起讨论一下。