龙空技术网

java开发规范

monesy小孩 150

前言:

此时朋友们对“java编程规范在线阅读”大概比较关切,姐妹们都需要了解一些“java编程规范在线阅读”的相关文章。那么小编同时在网摘上网罗了一些有关“java编程规范在线阅读””的相关内容,希望看官们能喜欢,大家快快来学习一下吧!

阅读目录

1、变量、成员、方法名统一采用驼峰命名(lowerCamelCase),做到见语知其义2、类名的定义3、常量、类型、接口、子类的定义4、包名、异常、枚举、方法名称的定义5、领域模型定义规范:主要是以VO\DTO\DO等结尾1、括号代码要求2、括号中间的操作变量要有空格,左右括号不出现空格。3、注释规范:注释的双斜线与注释内容之间有且仅有一个空格4、行字符数限制不超过120个,超出需要换行,换行时遵循如下原则:5、方法传参中,多个参数之间要有空格。1、重写方法规范:重写方法必须添加注解@Override避免方法名不一致2、参数如果相同、含义也相同,使用可变参数替换逐个定义3、不能使用过时的类或方法4、Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals5、所有整型包装类对象之间值的比较,使用equals方法比较6、任何货币金额,均以最小货币单位且整型类型来进行存储7、浮点数之间的比较8、禁止使用构造方法BigDecimal(double)的方式把double值转化为BigDecimal对象9、基本类型和包装类型使用规范10、使用索引访问用String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛IndexOutOfBoundsException的风险1、类(抽象类)、类属性、类方法的注释2、所有的类都必须添加创建者和创建日期3、方法内部单行注释4、在类中删除未使用的任何字段、方法、内部类;在方法中删除未使用的任何参数声明与内部变量5、谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除6、特殊注释标记,请注明标记人与标记时间。注意及时处理这些标记,通过标记扫描,经常清理此类标记。线上故障有时候就是来源于这些标记处的代码1、switch括号内的变量类型为String并且此变量为外部参数时,必须先进行null判断2、在if/else/for/while/do语句中必须使用大括号。3、三目运算符值规范。4、在高并发场景中,避免使用”等于”判断作为中断或退出的条件。5、表达异常的分支时,少用if-else方式。6、不要在其它表达式(尤其是条件表达式)中,插入赋值语句。7、不要在条件判断中执行其它复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性。(一)java命名规范1、变量、成员、方法名统一采用驼峰命名(lowerCamelCase),做到见语知其义

例子:变量——用户数据(userList)、方法——getUserData(int type)等。

说明:正常变量定义使用驼峰命名,特殊的如DTO\VO\DO等除外。

2、类名的定义

(1)普通类名采用大写字母开始;

(2)抽象类采用Abstract或Base开头。 例子:普通类——class

UserModel,抽象类——abstract class AbstractUserDefinition等

3、常量、类型、接口、子类的定义

(1)常量使用全大写且单词之间用"_“隔开; (2)boolean变量不能使用is开头;

(3)接口尽量不要修饰符、子类紧跟接口追加Impl。

例子:常量——SORT_TYPE,布尔类型——flag,接口——UserService,实现类——UserServiceImpl等。

说明:常量不可组装,需要原子性定义,不能出现"KEY”+SORT_TYPE这种内部出现。

4、包名、异常、枚举、方法名称的定义

(1)包名一律采用小写; (2)异常都采用_Exception结尾; (3)枚举都是以Enum结尾;

(4)方法名称——根据方法内容采用如插入insert-*。

例子:异常——UserException,包名——com.test,枚举——UserEnum,方法名称——insertUser等。

5、领域模型定义规范:主要是以VO\DTO\DO等结尾

例子:用户数据——UserDTO等 (1)数据对象:xxxDO,xxx 即为数据表名。

​(2)数据传输对象:xxxDTO,xxx为业务领域相关的名称。 (3)展示对象:xxxVO,xxx一般为网页名称。

​(4)POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。

(二)代码格式规范1、括号代码要求

左大括号前不换行、左大括号后换行、右大括号前换行、右大括号后还有else等代码则不换行;表示终止的右大括号后必须换行。

如:

public static void main(String[] args) { String name = "test名称"; if(name.equals("prod")){ System.out.println("prod 谨慎!"); }else if(name.equals("test")){ System.out.println("test 不删服务器就行!"); }else{ System.out.println("别砸电脑就行!"); } }

2、括号中间的操作变量要有空格,左右括号不出现空格。

如:if(a == b)

3、注释规范:注释的双斜线与注释内容之间有且仅有一个空格

如:

// 变量作用

boolean switchTree = false;

4、行字符数限制不超过120个,超出需要换行,换行时遵循如下原则:

(1)第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进; ​

(2)运算符与下文一起换行;

​(3)方法调用的点符号与下文一起换行; ​

(4)方法调用中的多个参数需要换行时,在逗号后进行; ​

(5)在括号前不要换行。 例子:

StringBuilder sb = new StringBuilder(); // 超过 120 个字符的情况下,换行缩进 4 个空格,并且方法前的点号一起换行 sb.append(“A”).append(“B”)…

.append(“C”)…

.append(“D”)…

.append(“E”);

错误示例:

StringBuilder sb = new StringBuilder(); // 超过120个字符的情况下,不要在括号前换行,下面是违反(5)条

sb.append(“A”).append(“B”)…append

(“C”); // 参数很多的方法调用可能超过 120个字符,逗号后才是换行处,违反(3)条

method(s1, s2, s3, …

, argsX);

5、方法传参中,多个参数之间要有空格。

例子:

private static void test1(String name, String user){

System.out.println(“test1”);

}

(三)java程序规范1、重写方法规范:重写方法必须添加注解@Override避免方法名不一致2、参数如果相同、含义也相同,使用可变参数替换逐个定义3、不能使用过时的类或方法4、Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals

如:“test”.equals(key)

5、所有整型包装类对象之间值的比较,使用equals方法比较

原因:对于 Integer var = ?在-128至127之间的赋值,Integer对象是在

IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断

6、任何货币金额,均以最小货币单位且整型类型来进行存储

如:10元 ->> 1000

7、浮点数之间的比较

浮点型的包装类的比较不能使用equals,采用BigDecimal来实现,float基本类型不能使用==判定,采用误差范围之内相等。

(1) 指定一个误差范围,两个浮点数的差值在此范围之内,则认为是相等的。

float a = 1.0F - 0.9F; float b = 0.9F - 0.8F; float diff = 1e-6F; if (Math.abs(a - b) < diff) { System.out.println("true"); }

(2) 使用 BigDecimal 来定义值,再进行浮点数的运算操作。

BigDecimal a = new BigDecimal("11.0"); BigDecimal b = new BigDecimal("10.9"); BigDecimal x = a.subtract(b); if (x.compareTo(y) == 0) { System.out.println("true"); }

8、禁止使用构造方法BigDecimal(double)的方式把double值转化为BigDecimal对象

原因:精度会损失。 正确例子:使用BigDecimal bg = BigDecimal.valueOf(double)进行初始化。

9、基本类型和包装类型使用规范

(1)所有的POJO类属性必须使用包装数据类型;

​(2)RPC方法的返回值和参数必须使用包装数据类型;

​(3)所有的局部变量使用基本数据类型(推荐)。

10、使用索引访问用String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛IndexOutOfBoundsException的风险

例子:

String str = "a,b,c,e,"; String[] ary = str.split(","); // 预期为5,结果是4 System.out.println(ary.length);

(四)java注释规范1、类(抽象类)、类属性、类方法的注释

必须使用Javadoc规范,使用/*内容/格式,不得使用 //

xxx方式,在工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。

2、所有的类都必须添加创建者和创建日期

在idea中File→Settings→Editor→File and Code

Templates→Files→Class中的include中添加: @author 为USER@dateUSER@date{DATE};

3、方法内部单行注释

在被注释语句上方另起一行,使用// 注释。方法内部多行注释使用 /* */ 注释,注意与代码对齐。

4、在类中删除未使用的任何字段、方法、内部类;在方法中删除未使用的任何参数声明与内部变量5、谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除

代码被注释掉:

(1)后续会恢复此段代码逻辑。

(2)永久不用,假如需要查阅历史代码,登录代码仓库即可。

6、特殊注释标记,请注明标记人与标记时间。注意及时处理这些标记,通过标记扫描,经常清理此类标记。线上故障有时候就是来源于这些标记处的代码

(1)待办事宜(TODO):(标记人,标记时间,[预计处理时间])表示需要实现,但目前还未实现的功能。 是一个Javadoc的标签,目前的

Javadoc 还没有实现,但已经被广泛使用。只能应用于类,接口和方法(因为它是一个 Javadoc 标签)。

(2)错误,不能工作(FIXME):(标记人,标记时间,[预计处理时间])在注释中用FIXME标记某代码是错误的,而且不能工作,需要及时纠正的情况。

(五)java控制语句1、switch括号内的变量类型为String并且此变量为外部参数时,必须先进行null判断

原因是:

switch中的参数如果是null,则不进行语句string任何case。

说明:switch中的case都需要有default(强制)。

2、在if/else/for/while/do语句中必须使用大括号。

如:

if(t1 == t2){

System.out.println(“*************”);

}

3、三目运算符值规范。

condition ? 表达式 1 : 表达式 2 中,高度注意表达式1和2在类型对齐时,可能抛出因自动拆箱导致的NPE。

4、在并发场景中,避免使用”等于”判断作为中断或退出的条件。

说明:并发控制不好,会导致无法中断,如判断==0退出循环,并发会导致负数,中断不了循环。

5、表达异常的分支时,少用if-else方式。

例子:

if (condition) { ... return obj; } //逻辑代码

6、不要在其它表达式(尤其是条件表达式)中,插入赋值语句。

如:jdk源码中的HashMap中put方法。

7、不要在条件判断中执行其它复杂的语句,将复杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性。

正确例子:

final boolean existed = (file.open(fileName, "w") != null) && (...) || (...); if (existed) { ... }

标签: #java编程规范在线阅读