zoukankan      html  css  js  c++  java
  • 阿里Java编程规范 学习笔记

    编程规范

    命名规约

    1.包名,统一使用小写,单数形式,点分隔符之间仅有一个自然语义的英文单词。但是类名有复数含义,可以使用复数单词。 

    2.接口类,方法和属性不要加任何修饰符,并加上有效的javadoc注释。

    3.各层命名规范:

        A)Service/DAO层方法名规约

            1) 获取单个对象的方法用get做前缀。 

            2) 获取多个对象的方法用list做前缀。 

            3) 获取统计值的方法用count做前缀。 

            4) 插入的方法用save(推荐)或insert做前缀。 

            5) 删除的方法用remove(推荐)或delete做前缀。 

            6) 修改的方法用update做前缀。 

        B)领域模型命名规约

            1) 数据对象:xxxDO,x xx即为数据表名。 

            2) 数据传输对象:xxxDTO,xxx为业务领域相关的名称。 

            3) 展示对象:xxxVO,xxx一般为网页名称。 

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

    常量定义 

    1.不允许任何魔法值(即未经定义的常量)直接出现在代码中。

    2.long和Long初始赋值时,必须使用大写的L,不能是小写的l。

    3.不要使用常量类维护所有的常量,应该按常量功能进行归类,类名以Consts结尾 

    4.常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量 。

        1)跨应用共享常量:放置在二方库中,通常是client.jar中的const目录下。

        2)应用内共享常量:放置在一方库的modules中的const目录下。

        3)子工程内共享常量:即在当前子工程的const目录下。

        4)包内共享常量:即在当前包下单独的const目录下。

        5)类内共享常量:直接在类内部private static final定义。

    格式规约 

    1.单行字数不超过120个,超出需要换行,换行时,遵循如下原则:

        1)换行时相对上一行缩进4个空格。

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

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

        4)在多个参数超长,逗号后面进行换行。

        5)括号前面不要换行。

    2. 方法体内的执行语句组、变量的语义定义组、不同的业务逻辑之间或者不同的语义之间插入一个空行。

    OOP规约 

    1.对外暴露的接口签名,原则上不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@Deprecated注解,并清晰的说明采用的新接口或者新服务是什么。

    2.不能使用过时的类和方法。

    3.Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。

    说明:推荐使用java.util.Objects.equals(a,b) (JDK7引入的工具类)

    4. 关于基本数据类型与包装数据类型的使用标准如下:

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

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

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

        4)在定义DODTOVO等POJO时,不要设定任何属性默认值。

    5.POJO类必须写重写toString()方法 。

    6.类内方法的定义顺序:公有方法或者保护方法>私有方法>getter&setter方法。

    7.循环体内,字符串的联接方式,使用StringBuilder的append方法进行扩展。

    8.final可以提高程序响应效率,声明成final的情况:

        1)不需要重新赋值的变量,包括类属性,局部变量。

        2)对象参数前加final,表示不允许修改引用的指向。

        3)类方法确定不允许被重写。

     9.类成员与方法访问控制从严:

        1)如果不允许外部直接通过new来访问对象,那么构造方法必须是private。

        2)工具类不允许有public和default构造方法。

        3)类非static成员变量并且与子类共享,必须是protected。

        4)类非static成员变量并且仅在本类使用,必须是private。

        5)类static成员变量如果仅在本类使用,必须是private。

        6)若是static成员变量,必须考虑是否为final。

        7)类成员方法只供类内部调用,必须是private。

        8)类成员方法只对继承类公开,那么限制为protected。 

    集合处理 

    1.Map/Set的key为自定义对象时,必须重写hashCode和equals。

    2.使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型大小完全一样的数组。 

    3.不要在foreach循环里进行集合元素的remove/add 操作,若要请使用Iterator方式。

    4.集合初始化时,尽量指定集合初始值大小。

    5. 利用Set元素唯一的特性,可以快速对另一个集合进行去重操作,避免使用List的contains方法进行遍历去重操作。

    并发处理 

    1.线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。

    2.高并发时应该去考虑锁的性能损耗,能用无锁数据结构就不要用锁;能锁区块,就不要锁整个方法体;能用对象锁,就不要锁类 。

    3.对多个资源、数据库表、对象同时加锁时。需要保持一致的加锁顺序,否则可能会造成死锁。

    4.并发修改同一记录时,避免更新丢失,要么在应用层加锁,要么在缓存加锁,要么在数据库层使用乐观锁,使用version作为更新依据,乐观锁的重试次数不得小于3次。

    5.线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor去创建。

    控制语句 

    1.在一个switch内必须要有default快,即使什么都没做。

    2.在if/else/for/while/do语句中必须使用大括号,即使只有一行代码。

    3.推荐尽量少用else,if-else可以用if return来代替,如果使用if-else if-else来表达,不允许超过3层。

    4.不要在条件判断中执行复杂的语句,以提高可读性。

    5. 方法中需要进行参数校验的场景:

        1)调用频次低的方法。

        2)执行时间开销很大的方法。

        3)需要极高稳定性和可用性的方法。

        4)对外提供的开放接口,不管是RPC/API/HTTP接口。

    6. 方法中不需要参数校验的场景:

        1)极有可能被循环调用的方法,不建议对参数进行校验。

        2)底层的方法调用。如dao层不进行校验 。

        3)private方法,确认参数不会有问题。

    注释规约 

    1.类、类属性、类方法的注释必须使用javadoc规范,使用/**内容**/格式,不得使用//内容 方式。

    2. 所有的抽象方法(包括接口中的方法)必须要用javadoc注释、除了返回值、参数、异常说明外,还应该指出该方法做什么事情,实现什么功能。

    3.方法内部进行单行注释使用//,多行注释使用/**/

    4.所有的枚举类型字段必须要有注释,说明每个数据项的用途。

    5. 代码修改的同时,注释也要跟着修改。

    6.注释后的代码要配上说明。

    其它 

    1.在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。

    2.获取当前毫秒数:System.currentTimeMills();如果想获取更精确的纳秒级时间,使用System.nanaoTime()。

    3.对于"明确停止使用的代码和配置",要坚决从程序中清理出去。

  • 相关阅读:
    CDH6.3.1安装详细步骤(感写B站若泽大数据)
    windows远程ubuntu UI教程
    CentOS7搭建Tensorflow计算环境(cuda+cudnn+jupyterlab(Anaconda3)+pytorch+Tensorflow)
    中国计算机学会推荐国际学术会议和期刊目录-2019
    基于BA网络模型的二部图数据集生成
    GitHub文件的克隆与上传
    博客园中随笔,文章的区别
    Pycharm新建文件时头部模板的配置方法
    asyncio 和aiohttp
    随机UA
  • 原文地址:https://www.cnblogs.com/baokang/p/6284644.html
Copyright © 2011-2022 走看看