您好,欢迎光临本网站![请登录][注册会员]  
文件名称: JAVA开发手册V1.5 华山版2019.pdf
  所属分类: Java
  开发工具:
  文件大小: 1mb
  下载次数: 0
  上传时间: 2019-10-06
  提 供 者: ylh***
 详细说明:20190619版本。人家阿里巴巴免费公开的文档,为什么要收积分呢。不能设置免积分下载么?默认就要5个呢?目录 编程规约 ()命名风格 (二)常量定义… 4 三)代码格式… (四)OOP规约 7 伍五)集合处理 1 (六)并发处理 14 (七)控制语句... 。·· 中+··:*·*· .18 (八)注释规约... 21 (九)其它 ·:···..····.··aa:4:····a····· 22 二、异常日志 24 ()异常处理 着非·非B自。。自音。。 …124 (二)日志规约 26 单元测试 28 四、安全规约… …30 五、 MySQL数据库. 31 ()建表规约 31 (二)索引规约 32 三)SQL语句 ·。··q非,bpB··。。··香非非非。音音;非···看非··非··看非非非非非。DB;···。··着番非申·非非。pB;·。非。。·。··自看非非非非普B.非非非非 34 (四)ORM映射 35 六、工程结构 37 ()应用分层 。·自香非非非普bB 37 (二)二方库依赖 38 (三)服务器 ·看. 章D要··看章看DD。看看带 39 七、设计规约… …41 附1:版本历史 43 附2:专有名词解释 144 (注:浏览时请使用PDF左侧导航栏) Java开发手册 版本号 制定团队 更新日期 备注 1.5.0 阿里巴巴与ava社区开发者20190619华山版,新增21条,修改描述112处 编程规约 ()命名风格 1.【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束 反例:name/name/$name/name/name$/name 2.【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧乂。注意,纯拼音命名方式更要避免采用 正例: renminbi/ alibaba/ taobao/ youku/ hangzhou等国际通用的名称,可视同英文。 反例: DaZhe promotion折/ getPingfen By Name0[评分/int某变量=3 3.【强制】类名使用 UpperCamelCase风格,但以下情形例外:Do/BO/DTO/VO/AO /PO/UID等。 IE19J: JavaServerless Platform /User DO/ XmlService/TcpUdpDeal TaPromotion 反例: javaserverlessplatform/ UserD。/Ⅹ MLService/ TCPUDPDeal/ TAPromotion 4.【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase风格,必须遵 从驼峰形式。 正例:localvalue/gethttpmesSage0/inputUserld 5.【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字 长 正例: MAX STOCK COUNT/ CACHE EXPIRED TIME 反例: MAX COUNT/ EXPIRED TIME 6.【强制】抽象类命名使用 Abstract或Base开头;异常类命名使用 Exception结尾;测试类 命名以它要测试的类的名称开始,以Test结尾. 7.【强制】类型与中括号紧挨相连来表示数组。 正例:定义整形数组 int[ array Demo; 反例:在main参数中,使用 String args来定义。 8.【强制】POO类中布尔类型变量都不要加is前缀,否则部分框架解析会引起序列化错误。 说明:在本文 MySQL规约中的建表约定第一条,表达是与否的值采用isX的命名方式,所以,需要在 < result Map>设置从isx到xx的映射关系。 反例:定义为基本数据类型 Boolean isDeleted的属性,它的方法也是 isDeleted0,RPC框架在反向解 析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。 1/44 Java开发手册 9.【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使 用单数形式,但是类名如果有复数含义,类名可以使用复数飛式。 正例:应用工具类包名为 com. alibaba.aiutil类名为 MessageUtils(此规则参考 spring的框架结构) 10.【强制】避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命 名,使可读性降低。 说明:子类、父类成员变量名相同,即使是 public类型的变量也是能够通过编译,而局部变量在同一方法 内的不同代码块中同名也是合法的,但是要避免使用。对于非 setter/ getter的参数名称也要避免与成员 变量名称相同。 反例 public class Confusing Name public int age ∥/非 setter/ getter的参数名称,不允许与本类成员变量同名 public void getData(String alibaba)( f(true)( final int money=531; for(int i=0: i< 10; i++)i ∥在同一方法体中,不允许与其它代码块中的 taobao命名相同 final int money =615 class son extends ConfusingName ∥/不允许与父类的成员变量名称相同 blic int ag 11.【强制】杜绝完全不规范的缩写,避免望文不知义。 反例: Abstractclass“缩写”命名成 Absclass; condition“缩写”命名成 condi,此类随意缩写严重 降低了代码的可阅读性。 12.推荐】为了达到代码自解释的目标,仼何自定叉编程元素在命名时,使用尽量完整的单词 组合来表达其意。 正例:在JDK中,表达原子更新的类名为: AtomicReference FieldUpdater。 反例:inta的随意命名方式。 13.[推荐】在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。 IE151: startTime/workQueue/nameList/TERMINATED- THREAD_COUNT E19: startedAt/Queue OfWork/listName/COUNT TERMINATED THREAD 14.推荐〗如果模块、接口、类、方法使用了设计模式,在命名时需体现岀具体模式。 说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。 2/44 Java开发手册 正例: public class OrderFactory public class Login Proxy ublic class resourceobserver 15.[推荐】接口类中的方法和属性不要加任何修饰符号( public也不要加),保持代码的简洁 性,并加上有效的 Javadoc注释。尽量不要在接口里定义变量,如果一定要定乂变量,肯定 是与接口方法相关,并且是整个应用的基础常量。 正例:接口方法签名 void commit; 接口基础常量 String COMPANY=" alibaba 反例:接口方法定义 public abstract void f0 说明:JDK8中接口允许有默认实现,那么这个 default方法,是对所有实现类都有价值的默认实现。 16接口和实现类的命名有两套规贝 1)【强制】对于 Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,內部的实现类用 impl的后缀与接口区别。 正例: Cache ServiceImpl实现 Cache Service接口 2)【推荐】如果是形容能力的接口名称,取对应的形容词为接口名(通常是-able的形容词)。 正例: Abstracttranslator实现 Translatable接口。 17.[参考】枚举类名带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。 说明:枚举其实就是特殊的类,域成员均为常量,且构造方法被默认强制是私有。 正例:枚举名字为 ProcessstatusEnum的成员名称: SUCCESS/ UNKNOWN REASON。 18.【参考】各层命名规约 A) Service/DAO层方法命名规约 1)获取单个对象的方法用get做前缀。 2)获取多个对象的方法用ist做前缀,复数形式结尾如: listobjects 3)获取统计值的方法用 count做前缀。 4)插入的方法用save/ Insert做前缀。 5)删除的方法用 remove/ delete做前缀。 6)修改的方法用 update做前缀。 B)领域模型命名规约 1)数据对象:XXDO,XX即为数据表名 2)数据传输对象: XXXDTO,ⅹX为业务领域相关的名称 3)展示对象: XXXVO,XXX-般为网页名称。 4)POO是DO/DToO/BO/O的统称,禁止命名成 XXXPOJO 3/44 Java开发手册 (二)常量定义 强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。 反例: String key="Id# taobao"+ traded; cache put(key, value); ∥/缓存get时,由于在代码复制时,漏掉下划线,导致存击穿而出现冋题 2.【强制】在long或者Long赋值时,数值后使用大写的L,不能是小写的1,小写容易跟数 字1混淆,造成误解。 说明: Long a=2:写的是数字的21,还是Long型的2。 3.[推荐〗不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护。 说明:大而全的常量类,杂乱无章,使用查找功能才能定位到修改的常量,不利于理解和维护 正例:缓存相关常量放在类 CacheConsts下;系统配置相关常量放在类 Config Coηsts下。 4.【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、 包内共享常量、类内共享常量。 1)跨应用共享常量:放置在二方库中,通常是 client jar中的 constant目录下。 2)应用内共亨常量:放置在一方库中,通常是子模块中的 constant目录下。 反例:易懂变量也要统一定乂成应用内共享常量,两位工程师在两个类中分别定义了“YES″的变量 类A中: public static final String YES="yes 类B中: public static final String YeS="y" A.YES. equal!(B.YES),预期是true,但实际返回为 false,导致线上问题。 3)子工程内部共享常量:即在当前子工程的 constant目录下。 4)包内共亨常量:即在当前包下单独的 constant目录下。 5)类内共享常量:直接在类内部 private static final定义 5.【推荐】如果变量值仅在一个固定范围内变化用enum类型来定义。 说明:如果存在名称之外的延伸属性应使用enum类型,下面正例中的数字就是延伸信息,表示一年中的 第几个季节 正例: public enum Season Enum SPRING(I), SUMMER(2), AUTUMNB), WINTER(4) rivate int seq SeasonEnum(int seq)[ this seq=seq public int getseqo t return seq 4/44 Java开发手册 (三)代码格式 1.【强制】如果是大括号内为空,则简洁地写成仆即可,大括号中间无需换行和空格;如果是非 空代码块则: 1)左大括号前不换行。 2)左大括号后换行 3)右大括号前换行。 4)右大括号后还有ese等代码则不换行;表示终止的右大括号后必须换行。 2.【强制】左小括号和字符之间不出现空格;同样,右小括号和字符之间也不出现空格;而左 大括号前需要空格。详见第5条下方正例提示。 反例:(空格a==b空格) 3.【强制】if/for/ while/ switch/do等保留字与括号之间都必须加空格。 4.【强制】任何二目、三目运算符的左右两边都需要加一个空格。 说明:运算符包括赋值运算符=、逻辑运算符&&、加減乘除符号等。 5.【强制】采用4个空格缩进,禁止使用tab字符。 说明:如果使用tab缩进,必须设置1个tab为4个空格。IDEA设置tab为4个空格时,请勿勾选Use tab character;而在 eclipse中,必须勾选 insert spaces for tabs 正例:(涉及1-5点) public static void main(Stringl args)t ∥/缩进4个空格 String hello ∥/运算符的左右必须有一个空格 nt flag =0 ∥/关键词讦与括号之间必须有一个空格,括号内的f与左括号,0与右括号不需要空格 (flag==0){ System. out printIn(say) ∥/左大括号前加空格且不换行;左大括号后换行 f(fag==1){ System. out. printIn(" world"); ∥右大括号前换行,右大括号后有else,不用换行 else System. out. println("ok") ∥/在右大括号后直接结束,则必须换行 6.【强制】注释的双斜线与注释内容之间有且仅有一个空格。 正例 ∥这是示例注释,请注意在双斜线之后有一个空格 String param new String O 5/44 Java开发手册 7.【强制】在进行类型强制转换时,右括号与强制转换值之间不需要仼何空格隔开。 正例 ong first=1000000000 int second =(int first +2 8.【强制】单行字符数限制不超过120个,超出需要换行,换行时遵循如下原则: 1)第二行相对第一行缩进4个空格,从第三行开始,不再继续缩进,参考示例。 2)运算符与下文一起换行。 3)方法调用的点符号与下文一起换行。 4)方法调用中的多个参数需要换行时,在逗号后进行。 5)在括号前不要换行,见反例 正例 String Builder sb new String Builder O ∥/超过120个字符的情况下,换行缩进4个空格,点号和方法名称一起换行 sb. append("Jack").append("Ma") append(" append(" alibaba")… append("alibaba"); 反例 StringBuilder sb= new String( ∥超过120个字符的情况下,不要在括号前换行 sb. append("Jack).append(Ma").append Calibaba") ∥参数很多的方法调用可能超过120个字符,不要在逗号前换行 method(argsl, args2, args3 X); 9.【强制】方法参数在定义和传入时,多个参数逗号后边必须加空格。 正例:下例中实参的args1,后边必须要有一个空格。 method(argsl, args2, args) 10.【强制】IDE的 text file encoding设置为UTF-8;IDE中文件的换行符使用∪niⅸx格式,不 要使用 Windows格式。 11.[推荐】单个方法的总行数不超过80行。 说明:除注释之外的方法签名、左右大括号、方法内代码、空行、回车及任何不可见字符的总行数不超过 80行。 正例:代码逻辑分清红花和绿叶,个性和共性,绿叶逻辑单独岀来成为额外方法,使主干代码更加清晰; 共性逻辑抽取成为共性方法,便于复用和维护。 12.[推荐】没有必要增加若干空格来使变量的赋值等号与上一行对应位置的等号对齐。 正例 nt one =1 long two =2L; float three 3F String Builder sb new String Builder( 6/44 Java开发手册 说明:增加sb这个变量,如果需要对齐,则给one、two、 three都要增加几个空格,在变量比较多的情 况下,是非常累赘的事情。 13.[推荐】不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性 说明:任何情形,没有必要插入多个空行进行隔开。 四)OOP规约 1.【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析 成本,直接用类名来访问即可。 2.【强制】所有的覆写方法,必须加 Override注解。 说明: getobject0与 getobject0的问题。一个是字母的O,一个是数字的0,加 Override可以准确判 断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。 3.[强制】相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用 Object 说明:可变参数必须放置在参数列表的最后。(提倡同学们尽量不用可变参数编程) 正例: public List listserv( String type,Long…ids){.} 4.【强制】外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产 生影响。接口过时必须加 Deprecated注解,并清晰地说明采用的新接口或者新服务是什 么 5.【强制】不能使用过时的类或方法。 说明: Java. net. URLDecoder中的方法 decode( String encodeStr)这个方法已经过时,应该使用双参数 decode( String source, String encode)。接口提供方既然明确是过时接口,那么有义务同时提供新的接 口;作为调用方来说,有义务去考证过时方法的新实现是什么。 6.【强制】 Object的 equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals 正例:"test". equals( object); 反例: object equals("test"); 说明:推荐使用java.uti! Objects# equals(JDK7引入的工具类)。 7.【强制】所有整型包装类对象之间值的比较,全部使用 equals方法比较。 说明:对于 Integer var=?在-128至127范围内的赋值, Integer对象是在 IntegerCache cache产 生,会复用已有对象,这个区间内的 nteger值可以直接使用==进行判断,但是这个区间之外的所有数 据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals方法进行判断。 8.【强制】浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用 equals来判断。 说明:浮点数采用“尾数+阶码”的编码方式,类似于科学计数法的“有效数字+指数“的表示方式。二进 7/44
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: