<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/628e5bbbab2a3b49011be29f/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/628e5bbbab2a3b49011be29f/bg1.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0"><span class="fc3 sc0"> </span></div><div class="t m0 x1 h3 y2 ff2 fs1 fc0 sc1 ls0 ws0"><span class="fc3 sc0"> </span></div><div class="c x2 y3 w2 h4"><div class="t m0 x3 h2 y4 ff1 fs0 fc1 sc0 ls0 ws0"><span class="fc3 sc0"> </span></div></div><div class="c x2 y5 w2 h5"><div class="t m0 x3 h2 y6 ff1 fs0 fc1 sc0 ls0 ws0"><span class="fc3 sc0"> </span></div></div><div class="c x2 y7 w2 h6"><div class="t m0 x4 h7 y8 ff3 fs2 fc2 sc0 ls0 ws0"><span class="fc3 sc0"> </span></div></div><div class="c x2 y9 w2 h8"><div class="t m0 x3 h2 y6 ff1 fs0 fc1 sc0 ls0 ws0"><span class="fc3 sc0"> </span></div></div><div class="c x5 ya w3 h8"><div class="t m0 x6 h9 yb ff1 fs3 fc2 sc0 ls0 ws0"><span class="fc3 sc0"> </span></div></div></div><div class="pi" data-data='{"ctm":[1.611562,0.000000,0.000000,1.611562,0.000000,0.000000]}'></div></div>
</body>
</html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/628e5bbbab2a3b49011be29f/bg2.jpg"><div class="t m0 x7 ha yc ff4 fs1 fc4 sc0 ls0 ws0">前言<span class="ff5"> </span></div><div class="t m0 x8 hb yd ff6 fs4 fc0 sc0 ls0 ws0">《阿里巴巴<span class="_ _0"> </span><span class="ff7">Java<span class="_ _0"> </span></span>开发手册》是阿里巴<span class="_ _1"></span>巴集团技术团队的<span class="_ _1"></span>集体智慧结晶和经<span class="_ _1"></span>验总</div><div class="t m0 x1 hb ye ff6 fs4 fc0 sc0 ls0 ws0">结,经历了多次大<span class="_ _1"></span>规模一线实战的检<span class="_ _1"></span>验及不断的完善,<span class="_ _1"></span>系统化地整理成册<span class="_ _1"></span>,反馈<span class="ls1">给广</span></div><div class="t m0 x1 hb yf ff6 fs4 fc0 sc0 ls0 ws0">大开发<span class="ls1">者。</span>现代软件行业的高速发<span class="_ _1"></span>展对开发者的综合<span class="_ _1"></span>素质要求越来越高<span class="_ _1"></span>,因为不仅是</div><div class="t m0 x1 hb y10 ff6 fs4 fc0 sc0 ls0 ws0">编程知识点,其它<span class="_ _1"></span>维度的知识点也会<span class="_ _1"></span>影响到<span class="ls1">软件</span>的最终交付质量。比如<span class="_ _1"></span>:数据库的表</div><div class="t m0 x1 hb y11 ff6 fs4 fc0 sc0 ls0 ws0">结构和索引设计缺<span class="_ _1"></span>陷可能带来软件上<span class="_ _1"></span>的架构缺陷或性<span class="_ _1"></span>能风险;工程结构<span class="_ _1"></span>混乱导致<span class="ls1">后续</span></div><div class="t m0 x1 hb y12 ff6 fs4 fc0 sc0 ls0 ws0">维护艰难;<span class="_ _1"></span>没有鉴<span class="_ _1"></span>权的漏洞代码易被<span class="_ _1"></span>黑客攻击等等。<span class="_ _2"></span><span class="ls1">所以<span class="ls0">本手册以<span class="_ _0"> </span><span class="ff7">Java<span class="_ _3"> </span></span>开发者为中<span class="_ _1"></span>心</span></span></div><div class="t m0 x1 hb y13 ff6 fs4 fc0 sc0 ls0 ws0">视角,<span class="_ _2"></span>划分为编<span class="_ _1"></span>程规约、<span class="_ _2"></span>异<span class="_ _1"></span>常日志、<span class="_ _4"></span>单元测试、<span class="_ _4"></span>安全规约、<span class="_ _4"></span>工程结构、<span class="_ _4"></span><span class="ff7">MySQL<span class="_ _3"> </span><span class="ff6 ls1">数据<span class="ls0">库六</span></span></span></div><div class="t m0 x1 hb y14 ff6 fs4 fc0 sc0 ls0 ws0">个维度,再根据内<span class="_ _1"></span>容特征,细分成若<span class="_ _1"></span>干二级子目录。<span class="_ _1"></span>根据约束力强弱及故<span class="_ _1"></span>障敏感性,</div><div class="t m0 x1 hb y15 ff6 fs4 fc0 sc0 ls0 ws0">规约依次分为强<span class="_ _1"></span>制、推荐、参考三<span class="_ _1"></span>大类。对于规约<span class="ls1">条目</span>的延伸信息中<span class="ls1">,“</span>说明”<span class="ls1">对内</span></div><div class="t m0 x1 hb y16 ff6 fs4 fc0 sc0 ls0 ws0">容做了<span class="ls1">适当</span>扩展和解释;“正例”<span class="_ _1"></span><span class="ls1">提倡<span class="ls0">什么样的编码和实现方式<span class="_ _1"></span>;“<span class="ls1">反例</span>”说明<span class="ls1">需要</span></span></span></div><div class="t m0 x1 hb y17 ff6 fs4 fc0 sc0 ls0 ws0">提防的雷区,<span class="ls1">以及</span>真实的错误案例<span class="_ _1"></span>。<span class="ff7"> </span></div><div class="t m0 x9 hb y18 ff6 fs4 fc0 sc0 ls0 ws0">本手册的愿景是<span class="sc1">码出高效,码出质量</span>。现代软件架构<span class="_ _1"></span>都需要协同开发完<span class="_ _1"></span>成,高效</div><div class="t m0 x1 hb y19 ff6 fs4 fc0 sc0 ls0 ws0">协作即降低协同成<span class="_ _1"></span>本,提升沟通效率<span class="_ _1"></span>,所谓无规矩不<span class="_ _1"></span>成方圆,无规范不<span class="_ _1"></span>能协作。众所</div><div class="t m0 x1 hb y1a ff6 fs4 fc0 sc0 ls0 ws0">周知,制订交通<span class="_ _1"></span>法规表面上是要限<span class="_ _1"></span>制行车权,实际上<span class="_ _1"></span>是保障公众的人身<span class="_ _1"></span>安全。试想如</div><div class="t m0 x1 hb y1b ff6 fs4 fc0 sc0 ls0 ws0">果没有限速,没<span class="_ _1"></span>有红绿灯,谁还敢上<span class="_ _1"></span>路行驶。对软件<span class="_ _1"></span>来说,适当的规范<span class="_ _1"></span>和标准绝不是</div><div class="t m0 x1 hb y1c ff6 fs4 fc0 sc0 ls0 ws0">消灭代码内容的<span class="_ _1"></span>创造性、优雅性,<span class="_ _1"></span>而是限制过度个性<span class="_ _1"></span>化,以一种<span class="_ _1"></span>普遍认可的统一<span class="ls1">方式</span></div><div class="t m0 x1 hb y1d ff6 fs4 fc0 sc0 ls0 ws0">一起做事,提升<span class="_ _1"></span>协作效率。代码的字<span class="_ _1"></span>里行间流淌的是<span class="ls1">软件</span>生命中的血液<span class="_ _1"></span>,质量的提升</div><div class="t m0 x1 hb y1e ff6 fs4 fc0 sc0 ls0 ws0">是尽可能少踩坑,<span class="_ _1"></span>杜绝踩重复的坑,<span class="_ _1"></span>切实提升质量意<span class="_ _1"></span>识。<span class="ff7"> </span></div><div class="t m0 x9 hb y1f ff6 fs4 fc0 sc0 ls0 ws0">考虑到可以零距<span class="_ _1"></span>离地与众多开发同<span class="_ _1"></span>学进行互动,决定<span class="_ _1"></span>在线维护《手册》<span class="_ _1"></span>内容,此</div><div class="t m0 x1 hb y20 ff6 fs4 fc0 sc0 ls0 ws0">版本号为<span class="_ _0"> </span><span class="ff2 fs5">1.3.0<span class="_ _5"> </span></span>的<span class="_ _0"> </span><span class="ff7 fs0">PDF<span class="_ _6"> </span></span>版本,是对外释放的终<span class="ls1">极版</span>;<span class="ls1">其次</span>,我们会在<span class="_ _0"> </span><span class="ff7">2017<span class="_ _0"> </span></span>年<span class="_ _0"> </span><span class="ff7 ls2">10<span class="_ _0"> </span></span>月<span class="_ _0"> </span><span class="ff7 ls3">14</span></div><div class="t m0 x1 hb y21 ff6 fs4 fc0 sc0 ls0 ws0">日杭州<span class="ls1">云栖</span>大会上,<span class="_ _2"></span>进行阿里巴巴<span class="_ _0"> </span><span class="ff7 ls3">Java<span class="_ _3"> </span></span>开发规约插件全球首发,<span class="_ _2"></span>插件<span class="fc5">点此下载<span class="fc6">,<span class="_ _2"></span><span class="fc0">阿里</span></span></span></div><div class="t m0 x1 hb y22 ff6 fs4 fc0 sc0 ls0 ws0">巴巴云效(一站式<span class="_ _1"></span>企业协同研发云)<span class="_ _1"></span>也会集成代码<span class="ls1">规约</span>扫描引擎。最<span class="ls1">后,</span><span class="fc6">《<span class="sc2">码出高效</span></span></div><div class="t m0 x1 hc y23 ff6 fs4 fc6 sc0 ls0 ws0">——阿里巴巴<span class="_ _0"> </span><span class="ff7">Java<span class="_ _0"> </span></span>开发手册详解》<span class="ls1">即将</span>出版,敬请关<span class="_ _1"></span>注。<span class="ff2 fs6 fc0 sc1"> </span></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611562,0.000000,0.000000,1.611562,0.000000,0.000000]}'></div></div>
<div id="pf3" class="pf w0 h0" data-page-no="3"><div class="pc pc3 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/628e5bbbab2a3b49011be29f/bg3.jpg"><div class="t m0 x7 ha y24 ff6 fs1 fc1 sc0 ls0 ws0">目录<span class="ff3"> </span></div><div class="t m0 x1 hd y25 ff4 fs0 fc0 sc0 ls0 ws0">前言<span class="ff8 fs5"> </span></div><div class="t m0 x1 hd y26 ff4 fs0 fc0 sc0 ls0 ws0">一、编程规约<span class="ff5"> <span class="_ _2"></span>......................................................................... <span class="_ _7"></span>1<span class="ff1 fs5"> </span></span></div><div class="t m0 xa he y27 ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">一</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">命名风格<span class="ff5"> <span class="_ _7"></span>................................................................... <span class="_ _9"></span><span class="ff1">1<span class="fs5"> </span></span></span></span></div><div class="t m0 xa he y28 ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">二</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">常量定义<span class="ff5"> <span class="_ _7"></span>................................................................... <span class="_ _9"></span><span class="ff1">3<span class="fs5"> </span></span></span></span></div><div class="t m0 xa he y29 ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">三</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">代码格式<span class="ff5"> <span class="_ _7"></span>................................................................... <span class="_ _9"></span><span class="ff1">4<span class="fs5"> </span></span></span></span></div><div class="t m0 xa he y2a ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">四</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ls4">OOP<span class="_ _6"> </span></span><span class="ff4">规约<span class="ff5"> <span class="_ _9"></span>................................................................... <span class="_ _9"></span><span class="ff1">6<span class="fs5"> </span></span></span></span></div><div class="t m0 xa he y2b ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">五</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">集合处理<span class="ff5"> <span class="_ _7"></span>................................................................... <span class="_ _9"></span><span class="ff1">9<span class="fs5"> </span></span></span></span></div><div class="t m0 xa he y2c ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">六</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">并发处理<span class="ff5"> <span class="_ _7"></span>.................................................................. <span class="_ _a"></span><span class="ff1 ls5">12<span class="fs5 ls0"> </span></span></span></span></div><div class="t m0 xa he y2d ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">七</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">控制语句<span class="ff5"> <span class="_ _7"></span>.................................................................. <span class="_ _a"></span><span class="ff1 ls5">14<span class="fs5 ls0"> </span></span></span></span></div><div class="t m0 xa he y2e ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">八</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">注释规约<span class="ff5"> <span class="_ _7"></span>.................................................................. <span class="_ _a"></span><span class="ff1 ls5">16<span class="fs5 ls0"> </span></span></span></span></div><div class="t m0 xa he y2f ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">九</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">其它<span class="ff5"> <span class="_ _7"></span>...................................................................... <span class="_ _a"></span><span class="ff1 ls5">17<span class="fs5 ls0"> </span></span></span></span></div><div class="t m0 x1 hd y30 ff4 fs0 fc0 sc0 ls0 ws0">二、异常日志<span class="ff5"> <span class="_ _2"></span>........................................................................ <span class="_ _7"></span>18<span class="ff1 fs5"> </span></span></div><div class="t m0 xa he y31 ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">一</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">异常处理<span class="ff5"> <span class="_ _7"></span>.................................................................. <span class="_ _7"></span>18<span class="ff1 fs5"> </span></span></span></div><div class="t m0 xa he y32 ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">二</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">日志规约<span class="ff5"> <span class="_ _7"></span>.................................................................. <span class="_ _7"></span>19<span class="ff1 fs5"> </span></span></span></div><div class="t m0 x1 hd y33 ff4 fs0 fc0 sc0 ls0 ws0">三、单元测试<span class="ff5"> <span class="_ _2"></span>........................................................................ <span class="_ _7"></span>21<span class="ff1 fs5"> </span></span></div><div class="t m0 x1 hd y34 ff4 fs0 fc0 sc0 ls0 ws0">四、安全规约<span class="ff5"> <span class="_ _2"></span>........................................................................ <span class="_ _7"></span>23<span class="ff1 fs5"> </span></span></div><div class="t m0 x1 he y35 ff4 fs0 fc0 sc0 ls0 ws0">五、<span class="ff2 ls4">MySQL<span class="_ _6"> </span></span>数据库<span class="ff5"> <span class="_ _7"></span>.................................................................... <span class="_ _7"></span>24<span class="ff1 fs5"> </span></span></div><div class="t m0 xa he y36 ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">一</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">建表规约<span class="ff5"> <span class="_ _7"></span>.................................................................. <span class="_ _a"></span><span class="ff1 ls5">24<span class="fs5 ls0"> </span></span></span></span></div><div class="t m0 xa he y37 ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">二</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">索引规约<span class="ff5"> <span class="_ _7"></span>.................................................................. <span class="_ _a"></span><span class="ff1 ls5">25<span class="fs5 ls0"> </span></span></span></span></div><div class="t m0 xa he y38 ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">三</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ls4">SQL<span class="_ _6"> </span></span><span class="ff4">语句<span class="ff5"> <span class="_ _9"></span>.................................................................. <span class="_ _a"></span><span class="ff1 ls5">27<span class="fs5 ls0"> </span></span></span></span></div><div class="t m0 xa he y39 ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">四</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ls4">ORM<span class="_ _6"> </span></span><span class="ff4">映射<span class="ff5"> <span class="_ _9"></span>.................................................................. <span class="_ _a"></span><span class="ff1 ls5">28<span class="fs5 ls0"> </span></span></span></span></div><div class="t m0 x1 hd y3a ff4 fs0 fc0 sc0 ls0 ws0">六、工程结构<span class="ff5"> <span class="_ _2"></span>........................................................................ <span class="_ _7"></span>30<span class="ff1 fs5"> </span></span></div><div class="t m0 xa he y3b ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">一</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">应用分层<span class="ff5"> <span class="_ _7"></span>.................................................................. <span class="_ _a"></span><span class="ff1 ls5">30<span class="fs5 ls0"> </span></span></span></span></div><div class="t m0 xa he y3c ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">二</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">二方库依赖<span class="ff5"> <span class="_ _7"></span>................................................................ <span class="_ _a"></span><span class="ff1 ls5">31<span class="fs5 ls0"> </span></span></span></span></div><div class="t m0 xa he y3d ff2 fs0 fc0 sc0 ls0 ws0">(<span class="ff4">三</span>)<span class="ff1 fs5"> <span class="_ _8"> </span></span><span class="ff4">服务器<span class="ff5"> <span class="_ _7"></span>.................................................................... <span class="_ _7"></span>32<span class="ff1 fs5"> </span></span></span></div><div class="t m0 x1 hd y3e ff4 fs0 fc0 sc0 ls0 ws0">附<span class="_ _6"> </span><span class="ff5">1</span>:版本历史<span class="ff5"> <span class="_ _7"></span>....................................................................... <span class="_ _7"></span>34<span class="ff1 fs5"> </span></span></div><div class="t m0 x1 hd y3f ff4 fs0 fc0 sc0 ls0 ws0">附<span class="_ _6"> </span><span class="ff5">2</span>:本手册专有名词<span class="ff5"> <span class="_ _7"></span>................................................................. <span class="_ _7"></span>35<span class="ff1 fs5"> </span></span></div><div class="t m0 x1 h2 y40 ff1 fs0 fc0 sc0 ls0 ws0"> </div><div class="t m0 xb hc y41 ff2 fs6 fc0 sc1 ls0 ws0"> </div><div class="t m0 xc hf y42 ff4 fs0 fc0 sc0 ls0 ws0">(注:浏览时请使用<span class="_ _6"> </span><span class="ff2 fs5 fc6 ls6">PDF<span class="_ _5"> </span></span>左侧导航栏)<span class="ff5"> </span></div><div class="t m0 xb hd y43 ff5 fs0 fc0 sc0 ls0 ws0"> </div><div class="t m0 x1 hc y44 ff2 fs6 fc0 sc1 ls0 ws0"> <span class="_ _b"> </span> </div><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611562,0.000000,0.000000,1.611562,0.000000,0.000000]}'></div></div>
<div id="pf4" class="pf w0 h0" data-page-no="4"><div class="pc pc4 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/628e5bbbab2a3b49011be29f/bg4.jpg"><div class="t m0 xd h10 y45 ff4 fs7 fc0 sc0 ls0 ws0">阿里巴巴<span class="_ _5"> </span><span class="ff2">Java<span class="_ _c"> </span></span>开发手册<span class="ff5"> </span></div><div class="t m0 xe h11 y46 ff1 fs7 fc0 sc0 ls0 ws0"> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _c"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _6"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span><span class="ff7 fs8"> <span class="ff6 ls1">——</span></span><span class="ff6">禁止用于商业用途,违者必究——</span><span class="ls7"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _6"> </span> <span class="_ _c"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span><span class="ls8"> <span class="_ _e"></span></span> <span class="_ _d"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _6"> </span><span class="ff8">1</span> /<span class="ff8 ls5">35</span> </div><div class="t m0 xb h12 y47 ff1 fs7 fc0 sc0 ls0 ws0"> </div><div class="t m0 xf hc y48 ff2 fs6 fc0 sc1 ls0 ws0">Java<span class="_ _f"> </span><span class="ff6 ls9">开发手册</span><span class="ff8 sc0"> </span></div><div class="c x10 y49 w4 h13"><div class="t m0 x11 h10 y4a ff6 fs7 fc6 sc2 ls0 ws0">版本号<span class="ff2"> </span></div></div><div class="c x12 y49 w5 h13"><div class="t m0 x1 h10 y4a ff6 fs7 fc6 sc2 ls0 ws0">制定团队<span class="ff2"> </span></div></div><div class="c x13 y49 w6 h13"><div class="t m0 x14 h10 y4a ff6 fs7 fc6 sc2 ls0 ws0">更新日期<span class="ff2"> </span></div></div><div class="c x15 y49 w7 h13"><div class="t m0 x16 h10 y4a ff6 fs7 fc6 sc2 ls9 ws0">备注<span class="ff2 ls0"> </span></div></div><div class="c x10 y4b w4 h13"><div class="t m0 x11 h10 y4c ff2 fs7 fc6 sc0 ls0 ws0">1.3.0 </div></div><div class="c x12 y4b w5 h13"><div class="t m0 x11 h10 y4a ff6 fs7 fc6 sc0 ls0 ws0">阿里巴巴集团技术团队<span class="ff2"> </span></div></div><div class="c x13 y4b w6 h13"><div class="t m0 x17 h10 y4c ff2 fs7 fc0 sc1 ls0 ws0">2017.9.25 </div></div><div class="c x15 y4b w7 h13"><div class="t m0 x18 h10 y4a ff6 fs7 fc6 sc0 ls0 ws0">增加单元测试规约(<span class="ff2">PDF<span class="_ _d"> </span></span>终极版)<span class="ff2"> </span></div></div><div class="t m0 x1 he y4d ff2 fs0 fc0 sc0 ls0 ws0"> <span class="_ _10"> </span> </div><div class="t m0 x1 h14 y4e ff4 fs9 fc0 sc1 ls0 ws0">一、编程规约<span class="ff2"> </span></div><div class="t m0 x1 h15 y4f ff2 fsa fc0 sc1 ls0 ws0">(<span class="ff4">一</span>)<span class="ff9 sc0"> <span class="_ _11"></span><span class="ff4 sc1 ls9">命名<span class="ls0">风格<span class="ff2"> </span></span></span></span></div><div class="t m0 x19 he y50 ff2 fs0 fc0 sc0 ls4 ws0">1.<span class="ffa ls0"> <span class="_ _e"></span><span class="ff6 fc6">【强制】代码中的命名均不能以<span class="fc5">下划线或美元符号</span>开始,也不能以<span class="fc5">下划线或美元符号</span>结束。<span class="ff2"> </span></span></span></div><div class="t m0 x1a he y51 ff6 fs0 fc7 sc0 ls0 ws0">反例:<span class="ff2 fs5 fc8">_name / _<span class="_ _1"></span>_name / $Obje<span class="_ _1"></span>ct / nam<span class="_ _1"></span>e_ / name$ <span class="_ _1"></span>/ Object$<span class="_ _1"></span><span class="fs0 fc0"> </span></span></div><div class="t m0 x19 he y52 ff2 fs0 fc6 sc0 ls4 ws0">2.<span class="ffa ls0"> <span class="ff6">【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。<span class="ff2"> </span></span></span></div><div class="t m0 x8 hd y53 ff6 fs0 fc9 sc0 ls0 ws0">说明:<span class="_ _4"></span><span class="fc6">正确的英文拼写和语法可以让阅读者易于理解,<span class="_ _4"></span>避免歧义。<span class="_ _2"></span>注意,<span class="_ _4"></span>即使纯拼音命名方式</span></div><div class="t m0 x8 he y54 ff6 fs0 fc6 sc0 ls0 ws0">也要避免采用。<span class="ff2"> </span></div><div class="t m0 x1a he y55 ff6 fs0 fca sc0 ls0 ws0">正例:<span class="ff2 fs5 fc6">alibaba<span class="fs0"> <span class="ls4">/ </span></span>tao<span class="_ _1"></span>bao<span class="fs0"> <span class="ls4">/ </span></span>youku<span class="fs0"> <span class="ls4">/ </span></span>h<span class="_ _1"></span>angzhou<span class="fs0"> <span class="_ _12"></span><span class="ff6">等国际通用的名称,可视同英文。<span class="ff2"> </span></span></span></span></div><div class="t m0 x1a he y56 ff6 fs0 fc7 sc0 ls0 ws0">反例:<span class="ff2 fs5 fc6">DaZheProm<span class="_ _1"></span>otion<span class="fs0"> </span>[<span class="ff6 fs0">打折</span>]<span class="fs0"> <span class="ls4">/ </span></span>getPin<span class="_ _1"></span>gfenByNam<span class="_ _1"></span>e<span class="lsa">()<span class="_ _e"></span></span><span class="fs0"> </span>[<span class="ff6 fs0">评分</span>]<span class="fs0"> <span class="ls1">/ </span></span><span class="ls6">int</span><span class="fs0"> <span class="_ _12"></span><span class="ff6">某变量<span class="ff2"> <span class="_ _4"></span><span class="ls4">= 3<span class="ls0"> </span></span></span></span></span></span></div><div class="t m0 x19 he y57 ff2 fs0 fc6 sc0 ls4 ws0">3.<span class="ffa ls0"> <span class="_ _e"></span><span class="ff6">【强制】类名使用<span class="_ _6"> </span><span class="ff2 fs5">UpperCamel<span class="_ _1"></span>Case<span class="_ _5"> </span><span class="ff6 fs0">风格,必须遵从驼峰形式,但以下情形例外:</span><span class="ls6">DO</span><span class="fs0"> <span class="_ _4"></span><span class="ls4">/ <span class="_ _4"></span><span class="fs5 ls0">BO <span class="_ _1"></span><span class="fs0 ls4">/ </span></span></span></span></span></span></span></div><div class="t m0 x1a he y58 ff2 fs5 fc6 sc0 ls6 ws0">DTO<span class="fs0 ls0"> <span class="ls4">/ </span></span>VO<span class="fs0 ls0"> <span class="ls4">/ </span></span>AO<span class="_ _2"></span><span class="fs0 ls0"> </span></div><div class="t m0 x1a he y59 ff6 fs0 fca sc0 ls0 ws0">正例:<span class="ff2 fs5 fc6">MarcoPolo<span class="fs0"> <span class="ls4">/ </span></span>U<span class="_ _1"></span>serDO<span class="fs0"> <span class="ls4">/ </span></span>XmlS<span class="_ _1"></span>ervice<span class="fs0"> <span class="ls4">/ </span></span>TcpUd<span class="_ _1"></span>pDeal<span class="fs0"> <span class="ls4">/ </span></span>TaPro<span class="_ _1"></span>motion<span class="fs0"> </span></span></div><div class="t m0 x1a he y5a ff6 fs0 fc7 sc0 ls0 ws0">反例:<span class="ff2 fs5 fc6">macroPolo<span class="fs0"> <span class="ls4">/ </span></span>U<span class="_ _1"></span>serDo<span class="fs0"> <span class="ls4">/ </span></span>XMLS<span class="_ _1"></span>ervice<span class="fs0"> <span class="ls4">/ </span></span>TCPUD<span class="_ _1"></span>PDeal<span class="fs0"> <span class="ls4">/ </span></span>TAPro<span class="_ _1"></span>motion<span class="fs0"> </span></span></div><div class="t m0 x19 he y5b ff2 fs0 fc6 sc0 ls4 ws0">4.<span class="ffa ls0"> <span class="_ _e"></span><span class="ff6">【强制】<span class="_ _2"></span>方法名、参数名、<span class="_ _2"></span>成员变量、局部变量都统一使用<span class="_ _6"> </span><span class="ff2 fs5">lower<span class="_ _1"></span>CamelCas<span class="_ _1"></span>e<span class="_ _5"> </span><span class="ff6 fs0">风格,必须遵从</span></span></span></span></div><div class="t m0 x1a he y5c ff6 fs0 fc6 sc0 ls0 ws0">驼峰形式。<span class="ff2"> </span></div><div class="t m0 x1a he y5d ff6 fs0 fca sc0 ls0 ws0">正例:<span class="ff2 fc6"> <span class="fs5">localValu<span class="_ _1"></span>e<span class="fs0"> <span class="ls1">/ </span></span>ge<span class="_ _e"></span>tHttp<span class="_ _1"></span>Message<span class="lsa">()</span><span class="fs0"> <span class="ls1">/ </span></span>inputUserId<span class="fs0"> </span></span></span></div><div class="t m0 x19 he y5e ff2 fs0 fc6 sc0 ls4 ws0">5.<span class="ffa ls0"> <span class="_ _e"></span><span class="ff6">【强制】常量命名全部大写,单词间用下划线隔开,力求语<span class="_ _e"></span>义表达<span class="_ _e"></span>完整<span class="_ _e"></span>清楚,<span class="_ _e"></span>不要嫌<span class="_ _e"></span>名字<span class="_ _e"></span>长。<span class="_ _13"></span><span class="ff2"> </span></span></span></div><div class="t m0 x1a he y5f ff6 fs0 fca sc0 ls0 ws0">正例:<span class="ff2 fs5 fc6 ls6">MAX<span class="fs0 ls0">_<span class="fs5">STOC<span class="_ _1"></span>K<span class="fs0">_</span>COUNT<span class="fs0"> </span></span></span></span></div><div class="t m0 x1a he y60 ff6 fs0 fc7 sc0 ls0 ws0">反例:<span class="ff2 fs5 fc6 ls6">MAX<span class="fs0 ls0">_<span class="fs5">COUN<span class="_ _1"></span>T<span class="fs0"> </span></span></span></span></div><div class="t m0 x19 he y61 ff2 fs0 fc6 sc0 ls4 ws0">6.<span class="ffa ls0"> <span class="_ _e"></span><span class="ff6">【强制】抽象类命名使用<span class="_ _6"> </span><span class="ff2 fs5">Abstract<span class="_ _d"> </span></span>或<span class="_ _6"> </span><span class="ff2 fs5">Base<span class="_ _5"> </span></span>开头<span class="fs5">;</span>异常类命名使用<span class="_ _6"> </span><span class="ff2 fs5">Exception<span class="_ _d"> </span></span>结尾<span class="fs5">;</span>测试类</span></span></div><div class="t m0 x1a he y62 ff6 fs0 fc6 sc0 ls0 ws0">命名以它要测试的类的名称开始,以<span class="_ _6"> </span><span class="ff2 fs5">Test<span class="_ _5"> </span></span>结尾。<span class="ff2"> </span></div><div class="t m0 x19 he y63 ff2 fs0 fc6 sc0 ls4 ws0">7.<span class="ffa ls0"> <span class="_ _e"></span><span class="ff6">【强制】中括号是数组类型的一部分,数组定义如下:<span class="ff2 fs5 fc5">String<span class="lsa">[]</span></span><span class="ff2"> <span class="fs5">args;</span> </span></span></span></div><div class="t m0 x1a he y64 ff6 fs0 fc7 sc0 ls0 ws0">反例:<span class="fc6">使用<span class="_ _6"> </span><span class="ff2 fs5">String<span class="fs0"> </span>ar<span class="_ _1"></span>gs<span class="lsa">[]</span><span class="ff6 fs0">的方式来定义。<span class="ff2"> </span></span></span></span></div><div class="t m0 x19 he y65 ff2 fs0 fc6 sc0 ls4 ws0">8.<span class="ffa ls0"> <span class="_ _e"></span><span class="ff6">【强制】<span class="ff2 fs5">POJO<span class="_ _5"> </span></span>类中布尔类型的变量,都不要加<span class="_ _6"> </span></span></span><span class="fs5 ls6">is</span><span class="ff6 ls0">,否则部分框架解析会引起序列化错误。<span class="ff2"> </span></span></div><div class="t m0 x1a he y66 ff6 fs0 fc7 sc0 ls0 ws0">反例:<span class="fc6">定义为基本数据类型<span class="_ _6"> </span><span class="ff2 fs5">Boolean<span class="fs0"> <span class="_ _4"></span><span class="fs5">isDeleted<span class="ff6">;<span class="fs0">的属性,它的方法也是<span class="_ _6"> </span></span></span>isDel<span class="_ _1"></span>eted<span class="ls6">()</span><span class="ff6 fs0">,</span>RP<span class="_ _1"></span>C</span></span></span></span></div></div><div class="pi" data-data='{"ctm":[1.611562,0.000000,0.000000,1.611562,0.000000,0.000000]}'></div></div>
<div id="pf5" class="pf w0 h0" data-page-no="5"><div class="pc pc5 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/628e5bbbab2a3b49011be29f/bg5.jpg"><div class="t m0 xd h10 y45 ff4 fs7 fc0 sc0 ls0 ws0">阿里巴巴<span class="_ _d"> </span><span class="ff2">Java<span class="_ _d"> </span></span>开发手册<span class="ff5"> </span></div><div class="t m0 xe h11 y46 ff1 fs7 fc0 sc0 ls0 ws0"> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _6"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span><span class="ff7 fs8"> <span class="ff6 ls1">——</span></span><span class="ff6">禁止用于商业用途,违者必究——</span><span class="ls7"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _6"> </span> <span class="_ _c"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span><span class="ls8"> <span class="_ _e"></span></span> <span class="_ _d"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _5"> </span> <span class="_ _d"> </span> <span class="_ _6"> </span><span class="ff8">2</span> /<span class="ff8 ls5">35</span> </div><div class="t m0 xb h12 y47 ff1 fs7 fc0 sc0 ls0 ws0"> </div><div class="t m0 x1a he y67 ff6 fs0 fc6 sc0 ls0 ws0">框架在反向解析的时候,<span class="_ _14"></span><span class="ffb">“<span class="ff6">以为</span>”<span class="ff6">对应的属性名称是<span class="_ _6"> </span><span class="ff2 fs5">deleted</span>,<span class="_ _14"></span>导致属性获取不到,<span class="_ _14"></span>进而抛出异</span></span></div><div class="t m0 x1a he y68 ff6 fs0 fc6 sc0 ls0 ws0">常。<span class="ff2"> </span></div><div class="t m0 x19 he y69 ff2 fs0 fc6 sc0 ls4 ws0">9.<span class="ffa ls0"> <span class="_ _e"></span><span class="ff6">【强制】<span class="_ _12"></span>包名统一使用小写,<span class="_ _12"></span>点分隔符之间有且仅有一个自然语义的英语单词。<span class="_ _12"></span>包名统一使用</span></span></div><div class="t m0 x1a he y6a ff6 fs0 fc5 sc0 ls0 ws0">单数<span class="fc6">形式,但是类名如果有复数含义,类名可以使用复数形式。<span class="ff2"> </span></span></div><div class="t m0 x1a he y6b ff6 fs0 fca sc0 ls0 ws0">正例:<span class="ff2 fc6"> <span class="ff6">应用工具类包名为<span class="_ _6"> </span></span><span class="fs5 ls6">com</span>.<span class="fs5">alibab<span class="_ _1"></span>a<span class="fs0">.</span>open<span class="fs0">.</span>uti<span class="_ _1"></span>l<span class="ff6 fs0">、类名为<span class="_ _6"> </span></span>MessageUt<span class="_ _1"></span>ils<span class="ff6">(<span class="fs0">此规则参考</span></span></span></span></div><div class="t m0 x1a he y6c ff2 fs5 fc6 sc0 ls0 ws0">spring<span class="_ _5"> </span><span class="ff6 fs0">的框架结构<span class="fs5">)</span><span class="ff2"> </span></span></div><div class="t m0 x19 he y6d ff2 fs0 fc6 sc0 ls4 ws0">10.<span class="ffa ls0"> <span class="_ _4"></span><span class="ff6">【强制】杜绝完全不规范的缩写,避免望文不知义。<span class="ff2"> </span></span></span></div><div class="t m0 x1a he y6e ff6 fs0 fc7 sc0 ls0 ws0">反例:<span class="_ _4"></span><span class="ff2 fs5 fc6">Ab<span class="_ _e"></span>stract<span class="_ _1"></span>Class<span class="_ _4"></span><span class="ff6 fs0">“缩写”<span class="_ _2"></span>命名成<span class="_ _6"> </span><span class="ff2 fs5">AbsClass<span class="ff6">;</span>condi<span class="_ _1"></span>tion<span class="_ _4"></span><span class="ff6 fs0">“缩写”<span class="_ _2"></span>命名成<span class="ff2"> <span class="_ _12"></span><span class="fs5">condi<span class="ff6 fs0">,<span class="_ _2"></span>此类随</span></span></span></span></span></span></span></div><div class="t m0 x1a he y6f ff6 fs0 fc6 sc0 ls0 ws0">意缩写严重降低了代码的可阅读性。<span class="ff2"> </span></div><div class="t m0 x19 he y70 ff2 fs0 fc6 sc0 ls4 ws0">11.<span class="ffa ls0"> <span class="_ _4"></span><span class="ff6">【推荐】为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词</span></span></div><div class="t m0 x1a h16 y71 ff6 fs0 fc6 sc0 ls0 ws0">组合来表达其意。<span class="ffc"> </span></div><div class="t m0 x1a h16 y72 ff6 fs0 fca sc0 ls0 ws0">正例:<span class="fc6">从远程仓库拉取代码的类命名为<span class="_ _6"> </span><span class="ffc">PullCodeFrom<span class="_ _e"></span>RemoteRepository</span>。<span class="ffc"> </span></span></div><div class="t m0 x1a he y73 ff6 fs0 fc7 sc0 ls0 ws0">反例:<span class="fc6">变量<span class="_ _6"> </span><span class="ffc">int a; <span class="_ _6"> </span></span>的随<span class="_ _1"></span>意命名方式。<span class="ff2"> </span></span></div><div class="t m0 x19 he y74 ff2 fs0 fc6 sc0 ls4 ws0">12.<span class="ffa ls0"> <span class="_ _4"></span><span class="ff6">【推荐】如果模块、接口、类、方法使用了设计模式,在命名时体现出具体模式。<span class="ff2"> </span></span></span></div><div class="t m0 x1a he y75 ff6 fs0 fc9 sc0 ls0 ws0">说明:<span class="fc6">将设计模式体现在名字中,有利于阅读者快速理解架构设计理念。<span class="ff2"> </span></span></div><div class="t m0 x1a he y76 ff6 fs0 fca sc0 ls0 ws0">正例:<span class="ff2 fs5 fc6">public<span class="fs0"> </span>cla<span class="_ _1"></span>ss<span class="fs0"> </span>OrderFact<span class="_ _1"></span>ory;<span class="fs0"> </span></span></div><div class="t m0 x1a he y77 ff2 fs0 fc6 sc0 ls0 ws0"> <span class="ff7"> <span class="_"> </span></span><span class="fs5">public</span> <span class="fs5">cla<span class="_ _1"></span>ss<span class="fs0"> </span>LoginProx<span class="_ _1"></span>y;<span class="fs0"> </span></span></div><div class="t m0 x1a he y78 ff2 fs0 fc6 sc0 ls0 ws0"> <span class="ff7"> <span class="_"> </span></span><span class="fs5">public</span> <span class="fs5">cla<span class="_ _1"></span>ss<span class="fs0"> </span>ResourceO<span class="_ _1"></span>bserver;<span class="fs0"> </span></span></div><div class="t m0 x19 he y79 ff2 fs0 fc6 sc0 ls4 ws0">13.<span class="ffa ls0"> <span class="_ _4"></span><span class="ff6">【推荐】<span class="_ _12"></span>接口类中的方法和属性不要加任何修饰符号<span class="fs5">(<span class="ff2">public<span class="fs0"> <span class="_ _12"></span><span class="ff6">也不要加<span class="fs5">)<span class="_ _2"></span><span class="fs0">,<span class="_ _4"></span>保持代码的简洁</span></span></span></span></span></span></span></span></div><div class="t m0 x1a hf y7a ff6 fs0 fc6 sc0 ls0 ws0">性,<span class="_ _12"></span>并加上有效的<span class="_ _6"> </span><span class="ff2 fs5">Java<span class="_ _1"></span>doc<span class="_ _5"> </span><span class="ff6 fs0">注释。<span class="_ _12"></span>尽量不要在接口里定义变量,<span class="_ _12"></span>如果一定要定义变量,<span class="_ _14"></span>肯定是</span></span></div><div class="t m0 x1a he y7b ff6 fs0 fc6 sc0 ls0 ws0">与接口方法相关,并且是整个应用的基础常量。<span class="ff2"> </span></div><div class="t m0 x1a he y7c ff6 fs0 fca sc0 ls0 ws0">正例:<span class="fc6">接口方法签名:<span class="ff2 fs5">void<span class="fs0"> </span>f();<span class="_ _1"></span><span class="fs0"> </span></span></span></div><div class="t m0 x1a he y7d ff2 fs0 fc6 sc0 ls0 ws0"> <span class="lsb"> </span><span class="ff6">接口基础常量表示:</span><span class="fs5">String</span> <span class="fs5">COMPA<span class="_ _1"></span>NY<span class="fs0"> <span class="ls4">= "</span></span>alibaba<span class="fs0">"</span>;<span class="_ _1"></span><span class="fs0"> </span></span></div><div class="t m0 x1a he y7e ff6 fs0 fc7 sc0 ls0 ws0">反例:<span class="fc6">接口方法定义:<span class="ff2 fs5 fc0">public<span class="fs0"> </span>abstr<span class="_ _1"></span>act<span class="fs0 fc5"> </span><span class="fc6">void<span class="fs0"> </span>f();<span class="_ _1"></span><span class="fs0"> </span></span></span></span></div><div class="t m0 x1a he y7f ff6 fs0 fc9 sc0 ls0 ws0">说明:<span class="ff2 fs5 fc6 ls6">JDK<span class="fs0 ls0">8<span class="_ _6"> </span><span class="ff6">中接口允许有默认实现,那么这个<span class="_ _6"> </span></span><span class="fs5">defaul<span class="_ _1"></span>t<span class="_ _5"> </span><span class="ff6 fs0">方法,是对所有实现类都有价值的默</span></span></span></span></div><div class="t m0 x1a he y80 ff6 fs0 fc6 sc0 ls0 ws0">认实现。<span class="ff2"> </span></div><div class="t m0 x19 he y81 ff2 fs0 fc6 sc0 ls4 ws0">14.<span class="ffa ls0"> <span class="_ _4"></span><span class="ff6">接口和实现类的命名有两套规则:<span class="ff2"> </span></span></span></div><div class="t m0 x1a he y82 ff2 fs0 fc6 sc0 ls0 ws0"> 1<span class="ff6 fs5">)<span class="fs0">【强制】对于<span class="_ _6"> </span></span><span class="ff2">Service<span class="_ _d"> </span></span><span class="fs0">和<span class="_ _6"> </span></span><span class="ff2">DAO<span class="_ _5"> </span></span><span class="fs0">类,基于<span class="_ _6"> </span></span><span class="ff2">SOA<span class="_ _5"> </span></span><span class="fs0">的理念,暴露出来的服务一定是接口,内部</span></span></div><div class="t m0 x1a he y83 ff6 fs0 fc6 sc0 ls0 ws0">的实现类用<span class="_ _6"> </span><span class="ff2 fs5">Impl<span class="_ _5"> </span></span>的后缀与接口区别。<span class="ff2"> </span></div><div class="t m0 x1a he y84 ff6 fs0 fca sc0 ls0 ws0">正例:<span class="ff2 fs5 fc6">CacheServ<span class="_ _1"></span>iceImpl<span class="_ _5"> </span><span class="ff6 fs0">实现<span class="_ _6"> </span></span>CacheSe<span class="_ _1"></span>rvice<span class="_ _5"> </span><span class="ff6 fs0">接口。<span class="ff2"> </span></span></span></div><div class="t m0 x1a he y85 ff2 fs0 fc6 sc0 ls0 ws0"> 2<span class="ff6 fs5">)<span class="_ _7"></span><span class="ff2"> <span class="_ _13"></span><span class="ff6 fs0">【推荐】<span class="_ _9"></span><span class="ff2"> <span class="_ _12"></span><span class="ff6">如果是形容能力的接口名称,<span class="_ _9"></span>取对应的形容词做接口名<span class="_ _7"></span><span class="fs5">(<span class="fs0">通常是<span class="ffb">–</span></span><span class="ff2">able<span class="_ _5"> </span></span><span class="fs0">的形式</span>)<span class="_ _7"></span><span class="fs0">。<span class="ff2"> </span></span></span></span></span></span></span></span></div><div class="t m0 x1a he y86 ff6 fs0 fca sc0 ls0 ws0">正例:<span class="ff2 fs5 fc6">AbstractT<span class="_ _1"></span>ranslator<span class="_ _d"> </span><span class="ff6 fs0">实现<span class="ff2"> <span class="_ _4"></span><span class="fs5">Trans<span class="_ _1"></span>latable<span class="ff6 fs0">。<span class="ff2"> </span></span></span></span></span></span></div></div><div class="pi" data-data='{"ctm":[1.611562,0.000000,0.000000,1.611562,0.000000,0.000000]}'></div></div>