Java基础--24--日常Java编程规范

    科技2024-02-23  84

    1、代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例:_name、__name、$name、name_、name$、name__

    2、类名使用UpperCamelCase风格。 正例:JavaServerlessPlatform 反例:javaserverlessplatform

    3、方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。 正例:localValue、getHttpMessage()、inputUserId

    4、常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。 正例:MAX_STOCK_COUNT、CACHE_EXPIRED_TIME 反例:MAX_COUNT、EXPIRED_TIME

    5、类型与中括号紧挨相连来表示数组。 正例:定义整形数组int[] arrayDemo 反例:在main参数中,使用String args[]来定义

    6、避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名,使可读性降低。

    说明:子类、父类成员变量名相同,即使是public类型的变量也是能够通过编译,而局部变量在同一方法内的不同代码块中同名也是合法的,但是要避免使用。对于非setter/getter的参数名称也要避免与成员变量名称相同。

    反例:

    public class ConfusingName { public int age; // 非 setter/getter 的参数名称,不允许与本类成员变量同名 public void getData(String hello) { if(condition) { final int money = 531; // ... } for (int i = 0; i < 10; i++) { // 在同一方法体中,不允许与其它代码块中的 money 命名相同 final int money = 615; // ... } } } class Son extends ConfusingName { // 不允许与父类的成员变量名称相同 public int age; }

    7、杜绝完全不规范的缩写,避免望文不知义。 反例:AbstractClass缩写命名成AbsClass,condition缩写命名成condi,此类随意缩写严重降低了代码的可阅读性。

    8、在long或者Long赋值时,数值后使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。 说明:Long a = 2l;,写的是数字的21,还是Long型的2

    9、如果是大括号内为空,则简洁地写成{}即可,大括号中间无需换行和空格,如果是非空代码块则:

    1) 左大括号前不换行。 2) 左大括号后换行。 3) 右大括号前换行。 4) 右大括号后还有else等代码则不换行,表示终止的右大括号后必须换行。

    10、左小括号和字符之间不出现空格,同样右小括号和字符之间也不出现空格,而左大括号前需要空格。 反例:if (空格 a == b 空格)

    11、if/for/while/switch/do等保留字与括号之间都必须加空格。

    12、任何二目、三目运算符的左右两边都需要加一个空格。 说明:运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号等。

    13、采用4个空格缩进,禁止使用tab字符。 说明:如果使用tab缩进,必须设置1个tab为4个空格。IDEA设置tab为4个空格时,请勿勾选Use tab character,而在eclipse中,必须勾选insert spaces for tabs。

    正例:

    public static void main(String[] args) { // 缩进 4 个空格 String say = "hello"; // 运算符的左右必须有一个空格 int flag = 0; // 关键词 if 与括号之间必须有一个空格,括号内的 f 与左括号,0 与右括号不需要空格 if (flag == 0) { System.out.println(say); } // 左大括号前加空格且不换行;左大括号后换行 if (flag == 1) { System.out.println("world"); // 右大括号前换行,右大括号后有 else,不用换行 } else { System.out.println("ok"); // 在右大括号后直接结束,则必须换行 } }

    14、注释的双斜线与注释内容之间有且仅有一个空格。 正例:

    // 这是示例注释,请注意在双斜线之后有一个空格 String param = new String();

    15、在进行类型强制转换时,右括号与强制转换值之间不需要任何空格隔开。 正例:

    long first = 1000000000000L; int second = (int)first + 2;

    16、方法参数在定义和传入时,多个参数逗号后边必须加空格。 正例:下例中实参的args1,后边必须要有一个空格。

    method(args1, args2, args3);

    17、没有必要增加若干空格来使变量的赋值等号与上一行对应位置的等号对齐。 正例:

    int one = 1; long two = 2L; float three = 3F; StringBuilder sb = new StringBuilder();

    说明:增加sb这个变量,如果需要对齐,则给one、two、three都要增加几个空格,在变量比较多的情况下,是非常累赘的事情。

    18、所有的覆写方法,必须加@Override注解。 说明:getObject()与get0bject()的问题。一个是字母的O,一个是数字的0,加@Override可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。

    19、不能使用过时的类或方法。 说明:java.net.URLDecoder中的方法decode(String encodeStr)这个方法已经过时,应该使用双参数decode(String source, String encode)。接口提供方既然明确是过时接口,那么有义务同时提供新的接口。作为调用方来说,有义务去考证过时方法的新实现是什么。

    20、序列化类新增属性时,请不要修改serialVersionUID字段,避免反序列失败;如果完全不兼容升级,避免反序列化混乱,那么请修改serialVersionUID值。 说明:注意serialVersionUID不一致会抛出序列化运行时异常。

    21、当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起,便于阅读。

    22、泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用add方法,而<? super T>不能使用get方法,作为接口调用赋值时易出错。 说明:扩展说一下PECS(Producer Extends Consumer Super)原则: 第一、频繁往外读取内容的,适合用<? extends T> 第二、经常往里插入的,适合用<? super T>

    23、在一个switch块内,每个case要么通过continue/break/return等来终止,要么注释说明程序将继续执行到哪一个case为止,在一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有。 说明:注意break是退出switch语句块,而return是退出方法体。

    24、在if、else、for、while、do语句中必须使用大括号。 说明:即使只有一行代码,避免采用单行的编码方式。 反例:if (condition) statements;

    25、在高并发场景中,避免使用等于判断作为中断或退出的条件。 说明:如果并发控制没有处理好,容易产生等值判断被击穿的情况,使用大于或小于的区间判断条件来代替。 反例:判断剩余奖品数量等于0时,终止发放奖品,但因为并发处理错误导致奖品数量瞬间变成了负数,这样的话,活动无法终止。

    26、类、类属性、类方法的注释必须使用Javadoc规范,使用/**内容*/格式,不得使用// xxx方式。 说明:在IDE编辑窗口中,Javadoc方式会提示相关注释,生成Javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。

    27、所有的抽象方法(包括接口中的方法)必须要用Javadoc注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。 说明:对子类的实现要求,或者调用注意事项,请一并说明。

    28、代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改。 说明:代码与注释更新不同步,就像路网与导航软件更新不同步一样,如果导航软件严重滞后,就失去了导航的意义。

    29、谨慎注释掉代码。在上方详细说明,而不是简单地注释掉。如果无用,则删除。 说明:代码被注释掉有两种可能性: 1)后续会恢复此段代码逻辑。 2)永久不用。前者如果没有备注信息,难以知晓注释动机。后者建议直接删掉(代码仓库已然保存了历史代码)。

    30、对于注释的要求: 第一、能够准确反映设计思想和代码逻辑。 第二、能够描述业务含义,使别的程序员能够迅速了解到代码背后的信息。 说明:完全没有注释的大段代码对于阅读者形同天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;注释也是给继任者看的,使其能够快速接替自己的工作。

    随 亦 认证博客专家 安全博客专家 甲方安全部负责人,坐标杭州,欢迎猎挖。擅长安全架构、web渗透、移动安全、代码审计、隐私合规、安全开发、安全运营
    Processed: 0.027, SQL: 8