-
JAVA编程规范(阿里巴巴)
插件
命名规范
- 代码中的命名不能用$,_开头和结尾
- 类名遵从首字母大写的驼峰命名 如:TestService
- 方法名,参数名,属性名一律首字母小写得驼峰命名 如:addBook
- 常量名一律全部大写 (包括用final修饰的变量) 如:BOOK_COUNT
- 抽象类以Abstrsct , Base开头,测试类以测试的类名开头,Test结尾 如:BookServiceTest,异常类以Exception结尾 如:BusinessException
- 定义数组时,使用 String[] args,括号放在前面
- POJO类中布尔类型的变量都不要加is,否则会引起部分框架序列化错误,比如Boolean isDeleted,RPC框架在反向解析的时候,会以为属性名称为deleted,导致属性获取不到
- 避免缩写,不要嫌名字长,保证语义清楚
- 将设计模式体现到名字中,如OrderFactory,LoginProxy,ResourceObserve
- 接口中的属性和方法不用加public,保证代码简洁性,加上javadoc注释
- 实现类是使用接口类名加impl 如bookService,bookServiceImpl
- 枚举类加上ENUM后缀,枚举成员变量全部大写,如 SUCCESS_MSG;
- Service与Dao层方法的规约:获取单个对象的方法用get做前缀,获取多个对象的方法用list,获取统计值的方法用count做前缀,删除的方法用delete/remove做前缀,修改的方法用update做前缀(实际项目中查询用query开头,如queryBookList,querySingleBook)
- 领域模型的命名:如果是工具类以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
- 包名命名:config,dao,service,controller,vo,po,utils
- 定义long类型数据要大写,Long a = 2L;
代码格式
- 大括号内为空,可以写成{},非空则左括号前不换行,右括号前换行
- 比较运算符左右要加空格 如:if(a >= b)
- //与注释内容之间有一个空格 如:// 书籍的名字
- 多个参数,逗号后加空格 如:max(a, b, c)
OOP规约
- 工具类中最好都定义为static方法
- 所有覆盖的方法都加上@Override 这样可以避免错误
- 不建议使用的接口加上@Deprecated注解
- 使用equals方法时要把比较的内容放前面 如:“test”.equeals(teststr); 避免teststr为空,导致出现空指针异常
- POJO类的属性使用包装类型,局部变量使用基本类型
- getter和setter方法中不要加业务逻辑
- 循环体内,字符串的连接方式用StringBuilder的append方法
- Object的clone方法是浅拷贝
- static修饰成员属性时,一般都会加上final 如:private static final Logger=LoggerFactory.getLogger(xx.class)
集合
- foreach 支持get,set方法,不支持remove,add方法,想要边访问边删除,添加,使用iterator
并发
- 获取单例对象时要注意线程安全,比如资源驱动类,工具类,单例工厂类(如果只是输出的话就不用)
- SimpleDateFormat 是线程不安全的类
- 并发时,能不加锁的时候就不加锁(比如访问数据),能用锁区块就不用对象锁,能用对象锁,就不用类锁
- 对多个资源,数据库表同时加锁,要保证一致的加锁顺序,否则,会造成死锁。比如线程一对表A,B,C全部加锁后才能进行更新操作,那么线程二也必须是A,B,C
其他
- 在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。不要在方法体内定义:Pattern pattern = Pattern.compile(规则);
改为:private static Pattern FIND_PATTERN = Pattern.compile(“\w+”); - Math.random()这个方法返回的是double类型,取值范围为 0<=x<1 注意除0异常
异常
- 对于大段代码进行try catch 是不负责的表现(对参数判断可以专门写一个函数,不满足条件的就返回空或者失败的结果)
- try catch捕捉数据库操作时,要手动回滚事物
- 方法的返回值可以返回null
- 数据的查询结果可能为null
日志
- 类中使用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