阿里Java编程规范 学习笔记
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
编程规范
命名规约
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)在定义DO\DTO\VO等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.对于"明确停止使用的代码和配置",要坚决从程序中清理出去。
阿里Java编程规范 学习笔记的更多相关文章
- 阿里java开发规范学习(附P3C IDEA插件 帮助规范的养成)
浅析 阿里巴巴 Java 开发规约 (未完成) 更加优秀的页面展现请到浅析 阿里巴巴 Java 开发规约 contents 为什么要学 编程规约 P3C IDEA 插件 why-use 我们知道,一般 ...
- [Java编程思想-学习笔记]第3章 操作符
3.1 更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...
- Java编程思想学习笔记_1(Java内存和垃圾回收)
1.Java中对象的存储数据的地方: 共有五个不同的地方可以存储数据. 1)寄存器.最快,因为位于处理器的内部,寄存器按需求分配,不能直接控制. 2)堆栈.位于通用RAM,通过堆栈指针可以从处理器那里 ...
- Java编程思想 学习笔记1
一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆 ...
- Java编程思想学习笔记——类型信息
前言 运行时类型信息(RTTI:Runtime Type Information)使得我们可以在程序运行时发现和使用类型信息. Java在运行时识别对象和类的信息的方式: (1)一种是RTTI,它假定 ...
- [Java编程思想-学习笔记]第1章 对象导论
1.1 抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, ...
- Java编程思想 学习笔记12
十二.通过异常处理错误 Java的基本理念是“结构不佳的代码不能运行”. Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型.可靠的程序的生成,并且通过这种方式可以使你更加自信:你的 ...
- Java编程思想 学习笔记11
十一.持有对象 通常,程序总是根据运行时才知道的某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型. Java实用库还提供了一套相当完整的容器类来解决这个问题,其中基本的类 ...
- Java编程思想 学习笔记10
十.内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性.然而必须要了解,内部类和组合是 ...
随机推荐
- BZOJ 3518 点组计数 ——莫比乌斯反演
要求$ans=\sum_{i=1}^n \sum_{j=1}^m (n-i)(m-j)(gcd(i,j)-1)$ 可以看做枚举矩阵的大小,然后左下右上必须取的方案数. 这是斜率单增的情况 然后大力反演 ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 【莫队算法】
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- BZOJ 1197: [HNOI2006]花仙子的魔法【DP】
Description 相传,在天地初成的远古时代,世界上只有一种叫做“元”的花.接下来,出 现了一位拥有魔法的花仙子,她能给花附加属性,从此,“元”便不断变异,产生了大千世界千奇百怪的各种各样的花. ...
- 【2018.2.8-】网络流学习笔记(含ISAP!)
网络流的基础内容就不详细发了,网上到处都是,可自学. 总版点这里 ps:以下有些链接是hihocoder的题目(题面有详细讲解),请确保先登录hihocoder,再点击进入相应题目网页. 最大流 基础 ...
- 做运动(Dijkstra+并查集+MST)
上面的题解是这样,这道题我真的脑残,其实打代码的时候就意识到了许多,可以用Dfs+Dij+二分,这样还可以卡一卡 但是我打了spfa+spfa+二分,这个显然很慢,类似的题目我好像还做过一道的,就是在 ...
- Fruit Ninja
Fruit Ninja 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 Fruit Ni ...
- 数三角形(codevs 3693)
题目描述 Description 给定一个n×m的网格,请计算三个点都在格点上的三角形共有多少个(三角形的三点不能共线).下图为4×4的网格上的一个三角形. 输入描述 Input Descripti ...
- Apache Sqoop - Overview Apache Sqoop 概述
使用Hadoop来分析和处理数据需要将数据加载到集群中并且将它和企业生产数据库中的其他数据进行结合处理.从生产系统加载大块数据到Hadoop中或者从大型集群的map reduce应用中获得数据是个挑战 ...
- 【BZOJ2049】洞穴勘测(LCT)
题意:一张图,要求支持以下操作: 1.加边 2.删边 3.询问两点之间是否联通 100%的数据满足n≤10000, m≤200000 思路:LCT裸题,不需要维护任何信息 ..,..]of longi ...
- asp.net在IE10下事件丢失排错经过
下午看一篇文章,感觉对以后自己开发有点用途,摘抄下来. 原文出处:http://www.cnblogs.com/weapon/archive/2013/06/23/3150584.html 最近项目中 ...