文档开发者中心
我的

JAVA编码规范及CSEC整改技巧


学习JAVA语言不仅要学它该如何使用,还需要学习它的编码规范。优秀的代码不仅仅是正确,还应该是简洁、可维护、可靠、可测试、高效、可移植的。


编程是一种创造性的工作。


通用原则:


(1). 清晰第一。清晰性是易于维护、易于重构的程序必需具备的特征。

(2). 简洁为美。简洁就是易于理解并且易于实现。

(3). 风格一致。相比个人习惯,所有人共享同一种风格带来的好处,远远超出为统一而付出的代价。


一、JAVA命名注意点


(1)、 项目名全部小写

(2)、 包名全部小写

(3)、 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。

(4)、 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。

(5)、 常量名全部大写

(6)、 所有命名规则必须遵循以下规则:

1)、名称只能由字母、数字、下划线、$符号组成

2)、不能以数字开头

3)、名称不能使用JAVA中的关键字。

4)、坚决不允许出现中文及拼音命名。


二、JAVA注释规范


(1)、类注释

·         在每个类前面必须加上类注释,注释模板如下:

·         /**

·         * Copyright (C), 2006-2010, ChengDu Lovo info. Co., Ltd.

·         * FileName: Test.java

·         * 类的详细说明

·         *

·         * @author 类创建者姓名

·         * @since 创建日期

·         * @version 1.00

·         */

       注意:版权一定要与 @since的时间一致。


(2)、属性注释

·         在每个属性前面必须加上属性注释,注释模板如下:

·         /** 提示信息 */

·         private String strMsg = null;


(3)、方法注释

·         在每个方法前面必须加上方法注释,注释模板如下:

·         /**

·         * 类方法的详细使用说明

·         *

·         * @param 参数1 参数1的使用说明

·         * @return 返回结果的说明

·         * @throws 异常类型.错误代码 注明从此类方法中抛出异常的说明

·         */

 注意:注释中的参数一定要全面,一般包含参数和返回值。


(4)、构造方法注释

·         在每个构造方法前面必须加上注释,注释模板如下:

·         /**

·         * 构造方法的详细使用说明

·         *

·         * @param 参数1 参数1的使用说明

·         * @throws 异常类型.错误代码 注明从此类方法中抛出异常的说明

·         */


(5)、方法内部注释

·         在方法内部使用单行或者多行注释,该注释根据实际情况添加,单行注释“//”,多行注释“/* * */”

·      在方法内部进行注释的时候,注释尽量与上一行的代码之间加一个空格,例外是大括号{与注释之间可以不加空行。

·        例如:

·         //背景颜色

·         Color bgColor = Color.RED

·         /*

  * 背景颜色

  */

·         Color bgColor = Color.RED


三、CSEC整改遇到的相关问题总结


(1)对付魔鬼数字


在进行代码整改的时候,最令人头疼的一个问题就是魔鬼数字。但是有的时候开发人员为了图省事,经常起一些毫无意义的常量名字来替代数字,例如数字1定义为NUM_ONE。这样做是很不正确的事情,因为在代码中,无论是哪个位置出现数字都是有其一定的含义的,比如数组的位置、向量的长度等。因此,我们在利用常量消除魔鬼数字的时候,一定要注意常量的命名问题,常量的名字要让人一眼就可以看出它的意思。


首先,我们需要认清工具的本质,我们不能只是为了对付checkstyle检测工具,而不是针对代码本身的问题进行修改。工具本来是想提醒程序员,避免写出难以维护的代码。所以,我们千万不要误以为自己很聪明的把代码进一步隐藏起来,忽略当时的一个小问题,可能在后面会引发更大的问题。


如果我们真的是为了提高自己的编码水平,提高项目的代码质量,就应该认真的对待这些魔鬼数字。 对于魔鬼数字,应该有一个良好的命名,对于经常出现的,还应该找个合适的地方加以管理。


解决魔鬼数字的正确方法:


要解决魔鬼数字,首先是认清魔鬼数字代表的具体意义,结合意义给它起一个合适的名字。


例如下面的代码调整范例:


2是某个值在列表中的位置索引,换成XXX_IDX

80是http的默认端口,换成DEFAULT_HTTP_PROT

1000是用来把秒换成毫秒的,可以用MILLISECONDS_PER_SECOND

60000是默认超时时间来的,换成DEFAULT_TIMEOUT


同样,经常会看到魔鬼字符串,”0”,”1”这样的值出现代码里边,也应该把给他们起一个好的名字,例如作为执行结果,有SUCCESS、FAILED等。


注意:数组调用超过范围赋值为-1,这个-1是默认的情况,但是Checkstyle可能把他检测为魔鬼数字,可以忽略这个问题。


(2)注释问题


1)、对于常量、类变量(方法外的变量)、方法的注释需要在那一行上面添加头注释形式


2)、方法内的变量和魔鬼数字等的注释统一用//


3)、catch括号里的信息报错,注释写在{}的{下面一行


4)、注意注释统一用中文来写,除非特有名词简写成英文,其他都使用中文注释


(3)其他一些注意事项


1)集合后面要是复数形式,但是要注意对应单词是否是可数,data是不可数的,或者说是单复数同型,position做位置讲的时候是不可数的。


2)名字的长度正常是最少两个字符,但是在循环里面(i,j,k)可以例外。


3)对任何变量的命名都要讲求一眼就能让读者明白其含义,不能随意命名


4)表达式的比较,应该遵循左侧倾向于变化,右侧倾向于不变的原则


5)JAVA中Long类型建立的时候如果没赋值,会默认给一个0.而long类型建立的时候如果没有赋值,则是null!所以Long类型是包装类型,long类型是基础类型,不能混淆。


注释的话基本上都是:数据库操作必须使用包装器类型


6)checkstyle检查的时候说参数声明和参数使用距离过长,可以忽略这个提示。


7)方法定义的参数里面使用了变化的参数,可以忽略


8)对于只在日志中打印的内容,没有必要定义常量,因此可以忽略此处字符的重复。定义成常量要考虑其是否有特殊的意义来定义其为常量。


9)避免函数过长,函数要不超过50行(算法、协议可以除外)


10)注意行宽(注释不超过120个字符,中文60个字符)


11)布尔类的get方法应该用is开头来命名get方法,布尔型变量不能以否定开头


12)public方法要注意入参的判断,判断是否为null


注意:在进行CSEC整改的时候我们更应该关注于检查代码的安全性问题,安全性比一些规范更重要。因此,一定要注意方法入参的判断、是否泄漏敏感信息等事情。


五、JAVA编程还应该注意一下方面


(1)正确使用JAVA的面向对象技术,使得程序结构清晰、简单,方便团队其他人员查看和修改,提高代码的重用性。但是要注意方法内部实现的细节,使用JAVA特性的时候,要重点注意,尤其是多线程并发、泛型、装箱数据类型、异常处理、对象克隆等。


(2)再次强调我们在编码的时候要符合JAVA的常用习惯或者团队中统一的习惯,达到可读性。简单性、广泛性、兼容性的设计原则。同时也要注意开发的高效性、程序性能、安全性、可靠性问题。


(3)面向对象设计 Java是典型的面向对象编程语言,软件工程界有许多好的OOP原则,例如 SOLID,迪米特法则,Shalloway原则(去冗余)、好莱坞原则,组合/聚合复用原则,创建与使 用分离原则,CQRS等,有利于写出大规模的、可维护、可扩展的代码。


【参考文献】


《华为Java语言通用编程规范-V4_5》


针对魔鬼数字等问题很好地文章,如想详细了解可查看原文链接:


BY:HW-TS

点赞
收藏
回复
4
分享
举报
浏览3574 编辑于2019-10-09 06:44未知归属地
全部评论
最多点赞
最新发布
最早发布

这帖子值得讨论一番


2楼回复于2019-10-13 11:45 未知归属地

喜欢这样的总结,比较实用~

1楼回复于2019-10-09 12:33 未知归属地
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。