我们在做代码review的时候,通常会从这几个方面”挑刺“,一般出现了以下的问题,你的代码就是坏代码:
本文将从命名整洁、包结构整洁、类整洁、函数整洁、注释整洁、异常整洁,共六个方面介绍Java代码的整洁之道,其他语言也可以参考;
常用的命名规范包括匈牙利命名法、驼峰命名法、帕斯卡命名法、下划线命名法;
在Java中,常用的命名规范如下:
其中,Java中包命名规范如下:
如果是公司项目,则按以下格式命名:
com.公司名.{业务线}.项目名.模块名
如果是个人项目,则按照以下格式命名:
priv.个人名.项目名.模块名
类命名时要使用名词或者名词结尾,同时避免无意义名词,比如Data、Object等;
对于函数的命名,一般要使用动词开头,比如 addXXX();
同时一般要避免使用get/set开头;
对于变量的命名,要注意长度适中,一般8-20个字母为宜;
同时要避免使用单字母变量,比如 i、j等(即使在for循环中)
在一个Java项目中,同一个包下面的类要是内聚的,同时具备关联性和相互依赖性;
不同包下面的类一般是无关的、并且没有相互依赖性;
在Java中,类的整洁是最难整理的,因为涉及到整个项目的设计;
总的来说,有几条原则吧:
其中第三条可能比较满意理解,我解释一下什么叫做隔离改变?
主要是要做到几件事情:
1、接口隔离原则:一个类对另一个类的依赖应该建立在最小接口上;
2、迪米特法则:一个对象应当对其他对象尽可能少的了解;
常用措施比如:降低成员访问权限,final类, priviate属性方法等;属性获取通过get/set方法,而不是直接object.property;
3、开闭原则:通过新增代码实现新需求,而不是修改已有代码;
4、依赖倒置:依赖抽象,不依赖具体的实现,细节是多变的,抽象是稳定的;
在Java中函数的整洁也是比较难以做到的,为此我们要养成良好的意识;
再解释一下,如何使用异常代替返回码,如下:
其实,使用异常代替返回码也可以看成是遵守了一个函数只做一件事的原则,因为异常处理就是一件事情;
注释这块没啥好说的,只需要注意以下几点:
个人觉得,代码写得好,易读性高,注释可以少些点;
在Java中要正确的处理异常,要注意以下几点:
分层处理,链式传播是指各个层的异常在向上层传递时要带上本层异常的相关信息,方便上层处理;
受检异常和非受检异常关系图如下:
在处理异常时有几点经验,仅供参考:
1、不要忽略异常,try/catch中要进行处理;
2、不要使用异常来控制流程;
3、不要捕获Throwable类,在应用中不应捕获Throwable类,Error是Throwable类的子类,当应用抛出Errors的时候,一般都是不可恢复的情况;
4、要在方法定义分句中定义具体的异常。这种写法,表示该方法会抛出所有受检查异常,这不是一个良好的编程习惯。在这种情况下,我们最好抛出足够具体的异常,以便调用者进行合适的捕获和处理,如下:
public void testMethod() throws Exception {
....
}
5、异常处理的成本非常高,所以我们一般仅在异常情况下使用异常,在可恢复的异常情况下使用异常;
6、尽量使用标准异常;
7、正确包装异常类型,比如客户端代码都是对SQLException无能为力的,不要犹豫,把它转换为一个unchecked exception;
8、避免在finally语句块中抛出异常。finally代码块也可能再次抛出异常。如果同时抛出两个异常,则第一个异常的调用栈会丢失。在finally语句块中最好只做打印错误信息或者关闭资源等操作,避免在finally语句块中再次抛出异常。
1、CODELF 命名辅助工具;
2、Sonar / findbugs 代码质量检测工具;
特别感谢美团王超老师分享的整洁代码,本文主体内容参考自其讲解,特别感谢!本文仅供学习使用!