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. 领域模型的命名:如果是工具类以util结尾,如:BookUtil,如果是普通对象以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) 来使用日志
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值