java开发规范(笔记)

摘抄自阿里巴巴开发手册,记录了一些比较经典的点。
一、编程规约
(一)命名规约
1.【强制】 代码中的命名均不能以下划线或者美元符号开始,也不能以下划线或美元符号结束
反例 : _name/__name/ Object/name/name O b j e c t / n a m e / n a m e
2.【强制】 代码中的命名严禁拼音与英文混合的方式,更不允许直接使用中文的方式。
说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即时纯拼音的命名方式也要避免采用。
反例:DaZhePromotion【打折】/getPingfenByName() 【评分】
3.【强制】 类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:DO/BO/DTO/VO(领域模型的相关命名)
正例:MacroPolo /UserDao /XmlService /TcpUdpDeal
反例:macroPolo /UserDao /XMLService/TCPUDPDeal/TAPromotion
4.【强制】 方法名。参数名、成员变量、局部变量统一使用lowerCamelCase风格,必须遵从驼峰形式
正例:localValue / getHttpMessage() / inputUserId
5.【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长
正例:MAX_STOCK_COUNT
反例:MAX_COUNT
6.【强制】抽象类名命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾。
7.【强制】POJO类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。
反例:定义为基本数据类型boolean isSuccess 的属性,它的方法也是isSuccess(),RPC框架在方向解析的时候,以为对应的属性名称是success,导致属性获取不到,进而抛出异常。
8.【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英文单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
正例:应用工具类包名为 com.alibaba.open.util、类名为MessageUtils
9.【强制】杜绝完全不规范的缩写,避免望文不知义。
反例:AbstracClass 缩写命名成 AbsClass ; condition 缩写命名成condi,此类随意缩写严重降低了代码的可阅读性。
10.【推荐】如果使用到了设计模式,建议在类名中体现出具体模式
说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计思想。
正例:public class OrderFactory;
public class LoginProxy;
public class ResourceObserver;

(二)格式规约
1.【强制】任何运算符左右必须加一个空格
说明:运算符包括赋值运算符=、逻辑运算符&&、加减乘除符号、三目运行符
2.【强制】缩进采用4个空格,禁止使用tab字符
说明:如果使用tab缩进,必须设置1个tab为4个空格。IDEA设置tab为4个空格时,请勿勾选Use tab character;而在eclipse中,必须勾选insert spaces for tabs。

(三)OOP规约
1.【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。
2.【强制】相同参数类型,相同业务含义,才可以使用java的可变参数,避免使用Object。
说明:可变参数必须放置在参数列表的最后。(提倡同学们尽量不用可变参数编程)
3.【强制】Object的equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。
正例:“test”.equals(Object);
4.【强制】所有相同类型的包装对象之间值的比较,全部使用equals方法比较。
说明:对于Integer var =?在-128至127之间的赋值,Integer对象在IntegerCache.cache产生,会服用已有对象,这个区间的Integer值可以直接使用==进行判断,但在这个区间之外的所有数据,都会在堆产生,并不会复用已有对象。这是一个大坑,推荐使用equals方法判断。
5. 【强制】构造方法里面进制加入任何业务逻辑,如果有初始化逻辑,请放在init方法中。

(四)集合处理
1.【强制】关于hashcode和equals的处理,遵循如下规则:
1).只要重写equals,就必须重写hashCode。
2).因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这个两个方法
3)如果自定义对象作为Map的键,那么必须重写hashCode和equals。
正例:String重写了hashCode和equals方法,所以我们可以非常愉快地使用String对象作为key来使用。
2、【推荐】集合初始化时,尽量指定集合初始化大小

(五)并发处理
1、【强制】线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
2、【推荐】避免Random实例被多线程使用,虽然共享该实例是线程安全的,但会因为竞争同一seed导致性能下降。
(六)控制语句
1、【强制】推荐尽量少用else,if-else的方式可以改写成:

if(condition){

return obj;
}
//接着写else的业务逻辑
说明:如果非得使用if()…else if()…else…方式表达逻辑 ,【强制】请勿超过3层,超过请使用状态设计模式。
正例:逻辑上超过3层的if-else代码可以使用卫语句,或者状态模式来实现
2、【推荐】循环体中的语句要考量性能,以下操作尽量移至循环体外处理,如定义对象、变量、获取数据库连接,进行不必要的try-catch操作。
(七)版本问题
1、【强制】二方版本库命名方式:主版本号.次版本号.修订号
1)主版本号:当做了不兼容api修改,或者增加了能改变产品方向的新功能
2)次版本号:当做了向下兼容的功能性新增(新增类、接口)
3)修订号:修复bug,没有修改方法签名的功能加强,保持Api兼容性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值