• JAVA编程规范(阿里巴巴)


    插件

    在这里插入图片描述

    命名规范

    1. 代码中的命名不能用$,_开头和结尾
    2. 类名遵从首字母大写的驼峰命名 如:TestService
    3. 方法名,参数名,属性名一律首字母小写得驼峰命名 如:addBook
    4. 常量名一律全部大写 (包括用final修饰的变量) 如:BOOK_COUNT
    5. 抽象类以Abstrsct , Base开头,测试类以测试的类名开头,Test结尾 如:BookServiceTest,异常类以Exception结尾 如:BusinessException
    6. 定义数组时,使用 String[] args,括号放在前面
    7. POJO类中布尔类型的变量都不要加is,否则会引起部分框架序列化错误,比如Boolean isDeleted,RPC框架在反向解析的时候,会以为属性名称为deleted,导致属性获取不到
    8. 避免缩写,不要嫌名字长,保证语义清楚
    9. 将设计模式体现到名字中,如OrderFactory,LoginProxy,ResourceObserve
    10. 接口中的属性和方法不用加public,保证代码简洁性,加上javadoc注释
    11. 实现类是使用接口类名加impl 如bookService,bookServiceImpl
    12. 枚举类加上ENUM后缀,枚举成员变量全部大写,如 SUCCESS_MSG;
    13. Service与Dao层方法的规约:获取单个对象的方法用get做前缀,获取多个对象的方法用list,获取统计值的方法用count做前缀,删除的方法用delete/remove做前缀,修改的方法用update做前缀(实际项目中查询用query开头,如queryBookList,querySingleBook)
    14. 领域模型的命名:如果是工具类以utils结尾,如:BookUtils,如果是普通对象以Vo结尾 如BookVo,直接用数据库表生成的对象用Po结尾,如BookPo,为什么需要Vo和Po,因为我们一般都是使用mybatis自动生成Po,所以Po很容易被覆盖,所以要修改都是在Vo中修改,操作的时候用spring框架中的BeanUtils.copyProperties(po,vo)就能复制属性到Vo对象,操作数据库的接口以Dao结尾,如:BookDao,业务层以Service结尾,如BookService,配置类以Config结尾,如DatasourceConfig,访问层用Controller结尾,如BookController
    15. 包名命名:config,dao,service,controller,vo,po,utils
    16. 定义long类型数据要大写,Long a = 2L;

    代码格式

    1. 大括号内为空,可以写成{},非空则左括号前不换行,右括号前换行
    2. 比较运算符左右要加空格 如:if(a >= b)
    3. //与注释内容之间有一个空格 如:// 书籍的名字
    4. 多个参数,逗号后加空格 如:max(a, b, c)

    OOP规约

    1. 工具类中最好都定义为static方法
    2. 所有覆盖的方法都加上@Override 这样可以避免错误
    3. 不建议使用的接口加上@Deprecated注解
    4. 使用equals方法时要把比较的内容放前面 如:“test”.equeals(teststr); 避免teststr为空,导致出现空指针异常
    5. POJO类的属性使用包装类型,局部变量使用基本类型
    6. getter和setter方法中不要加业务逻辑
    7. 循环体内,字符串的连接方式用StringBuilder的append方法
    8. Object的clone方法是浅拷贝
    9. static修饰成员属性时,一般都会加上final 如:private static final Logger=LoggerFactory.getLogger(xx.class)

    集合

    1. foreach 支持get,set方法,不支持remove,add方法,想要边访问边删除,添加,使用iterator

    并发

    1. 获取单例对象时要注意线程安全,比如资源驱动类,工具类,单例工厂类(如果只是输出的话就不用)
    2. SimpleDateFormat 是线程不安全的类
    3. 并发时,能不加锁的时候就不加锁(比如访问数据),能用锁区块就不用对象锁,能用对象锁,就不用类锁
    4. 对多个资源,数据库表同时加锁,要保证一致的加锁顺序,否则,会造成死锁。比如线程一对表A,B,C全部加锁后才能进行更新操作,那么线程二也必须是A,B,C

    其他

    1. 在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。不要在方法体内定义:Pattern pattern = Pattern.compile(规则);
      改为:private static Pattern FIND_PATTERN = Pattern.compile(“\w+”);
    2. Math.random()这个方法返回的是double类型,取值范围为 0<=x<1 注意除0异常

    异常

    1. 对于大段代码进行try catch 是不负责的表现(对参数判断可以专门写一个函数,不满足条件的就返回空或者失败的结果)
    2. try catch捕捉数据库操作时,要手动回滚事物
    3. 方法的返回值可以返回null
    4. 数据的查询结果可能为null

    日志

    1. 类中使用private static final Logger log=LoggerFactory.getLogger(xx.class) 来使用日志
  • 相关阅读:
    企业内部安全与风控管理图解
    linux的centos免密登录mysql数据库(mysql忘记密码情况)
    Hash与ZSet的常用命令以及其底层数据结构
    Python UI自动化测试详解
    DS18B20详解
    ACM浅聊
    JSP | 基于Servlet和JSP改造oa项目
    Unity URP 如何写基础的几何着色器
    jxTMS设计思想之结构
    能耗管理系统在煤矿行业中的应用
  • 原文地址:https://blog.csdn.net/qq_41588302/article/details/126177395