浅析 阿里巴巴 Java 开发规约

(未完成)

更加优秀的页面展现请到浅析 阿里巴巴 Java 开发规约

contents

why-use

我们知道,一般稍微大一点的公司,都会在系统架构设计完成之后,编码工作开始之前,给出一份属于自家公司,或是自家团队给出的编码规范文档,所有的编码工作人员都必须遵守其中的规范,避免规范不统一带来的不必要的沟通问题,而当你去到另一家公司的时候,可能又要学习另一种风格有差异的编码规范,阿里给我们带来了标准,相信用不了多久,会统一国内各java开发公司的规范,乃至击败Google,称为全球java开发者的规范

养成良好的编程规范的作用(为何学习并养成编程风格)

  1. 好的编码规范可以尽可能的减少一个软件的维护成本,并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护;
  2. 好的编码规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码;
  3. 好的编码规范可以最大限度的提高团队开发的合作效率;
  4. 长期的规范性编码还可以让开发人员养成好的编码习惯,甚至锻炼出更加严谨的思维;

阿里java规范的作用(为何要学习阿里的java编码规范)

就在不久前,5月17日,作为唯一的中国代表,阿里巴巴获邀加入Java全球管理组织Java Community Process (JCP)的最高执行委员会。

JCP是一个开放的国际组织,由Java开发者及被授权者组成,主要职能是发展和更新Java技术规范。

阿里此次能够入选JCP执行委员会主要缘于在电商、金融、物流等领域积累的丰富Java应用场景实践,让阿里巴巴有机会通过迭代式创新,将前沿Java技术应用于真实的生产环境。此外,阿里去年面向全球推出的《阿里巴巴Java开发规约》扫描插件,能够在Eclipse等著名开发工具中进行JAVA代码检测,极大推动了Java编程语言规范开发的进程。

此前在JCP组织当中,Java标准规范的制定主要由硅谷巨头牵头主导,此次阿里巴巴的加入,对于国内开发者、企业而言,将会使Java开发过程中容错与效率变得更高,国内开发标准或将成为全球规范

编程规约

命名规约

  • 采用空格缩进,禁止使用tab字符。

这是Google和ali一致的规约,只不过前者是一个tab对应2个空格,后者则是4个空格。之所以不提倡tab键,是因为不同的IDE对tab键的“翻译”默认有所差异,容易因不同程序员的个性化而导致同一份代码的格式混乱。。

  • POJO类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。

定义为基本数据类型boolean isSuccess;的属性,它的方法也是isSuccess(),RPC框架在反向解析的时候,“以为”对应的属性名称是success,导致属性获取不到,进而抛出异常。

  • 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,类名若有复数含义,则可使用复数形式。

避免硬编码问题是每个程序员都应该具备的基本素养,硬编码所带来的可读性差、维护困难等问题。

  • 接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性

正例:接口方法签名:void f();

反例:接口方法定义:public abstract void f();

  • Service/DAO层方法命名规约

    1)获取单个对象的方法用get做前缀。

    2)获取多个对象的方法用list做前缀。

    3)获取统计值的方法用count做前缀。

    4)插入的方法用save(推荐)或insert做前缀。

    5)删除的方法用remove(推荐)或delete做前缀。

    6)修改的方法用update做前缀。

常量定义

  • 不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。

    如:缓存相关的常量放在类:CacheConsts下;系统配置相关的常量放在类:ConfigConsts下。

说明:大而全的常量类,非得ctrl+f才定位到修改的常量,不利于理解,也不利于维护。

OOP规约

  • 相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object。

说明:可变参数必须放置在参数列表的最后。(提倡同学们尽量不用可变参数编程)effective java中提倡慎用可变参数,在重视性能的情况下,使用可变参数需要特别小心,可变参数方法的每次调用都会导致进行一次数组分配和初始化。如果凭经验确定无法承受这一成本,但又需要可变参数的灵活性,还有一种模式可以让你如愿以偿。

假设确定对某个方法95%的调用会有3个或者更少的参数,就声明改方法的5个重载,每个重载方法带有0至3个普通参数,当参数的数目超过3个时,就使用一个可变参数方法: 例如:

public void foo(){}
public void foo(int a1){}
public void foo(int a1,int a2){}
public void foo(int a1,int a2,int a3){}
public void foo(int a1,int a2,int a3,int ... rest){}

这种方法可能不太恰当,但是一旦需要它时,它可就帮上大忙了。

总之,在定义参数数目不定的方法时,可变参数方法是一种很方便的方式,但是它们不应该被过度滥用。如果使用不当,会产生混乱的结果。

  • 构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在init方法中。

初始化方法的参数,通过不同的参数体现不同的初始化方法,再由不同的构造器的重载传给初始化方法不同参数,以达到逻辑清晰,代码复用的目的,这一点在java.lang.thread中得到了淋漓尽致的体现,thread类的构造器中都是简单地调用了一下init()方法,具体的事都在init方法中,不同的构造器的重载只是传给init不同的参数

public Thread() {
init(null, null, "Thread-" + nextThreadNum(), 0);
}
public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
}
Thread(Runnable target, AccessControlContext acc) {
init(null, target, "Thread-" + nextThreadNum(), 0, acc);
}
...
...
  • POJO类必须写toString方法。使用工具类source> generate toString时,如果继承了另一个POJO类,注意在前面加一下super.toString。

  • 类内方法定义顺序依次是:公有方法或保护方法> 私有方法> getter/setter方法。

说明:

公有方法是类的调用者和维护者最关心的方法,首屏展示最好;

保护方法虽然只是子类关心,也可能是“模板设计模式”下的核心方法;

而私有方法外部一般不需要特别关心,是一

个黑盒实现;

因为方法信息价值较低,所有Service和DAO的getter/setter方法放在类体最

后。

插件

P3C是先进的反潜海上巡逻机,译作猎户座,海神之子

阿里云栖大会最新开源的Java代码规范检查工具p3c,作用类似于CheckStyle,FindBugs的综合,是《阿里巴巴Java开发手册》的有效补充,阿里将代码规范检查插件命名为p3c,大概就是取其先进的猎杀,预防bug的能力

Download P3C IDEA plugin

安装步骤

  1. 点击工具栏File
  2. 点击Setting
  3. 点击Plugin
  4. 点击Install Plugin From disk
  5. 弹出对话框,找到你下载的插件

p3c、checkstyle都是代码规范检测工具,帮助java开发者提高编码质量,有效缩小菜鸟和大咖的代码差距,是少数Java开发者都应该安装的插件。

阿里java开发规范学习(附P3C IDEA插件 帮助规范的养成)的更多相关文章

  1. JUC学习笔记--从阿里Java开发手册学习线程池的正确创建方法

    前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式, 这样的处理方式让写的同学 ...

  2. 从阿里Java开发手册学习线程池的正确创建方法

    前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更 ...

  3. 【转】线程池体系介绍及从阿里Java开发手册学习线程池的正确创建方法

    jdk1.7中java.util.concurrent.Executor线程池体系介绍 java.util.concurrent.Executor : 负责线程的使用与调度的根接口  |–Execut ...

  4. 阿里 JAVA 开发手册 学习 4 工程规约

    应用分层 1.分层如下 1)开放接口层:可以直接封装Service接口暴露成RPC:通过web封装成http接口:网关控制层等. 2)终端显示层:各个端的模板渲染并执行显示层. 3)Web层:主要是度 ...

  5. 阿里Java开发手册学习 3 MYSQL规约

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  6. 阿里Java开发手册学习 2 异常日志

    异常日志 异常处理 1.不要捕获继承自RuntimeException的运行时异常类,这类异常通常由程序员来校验,来保证查询的健壮性. 2. 不要对大段代码 try catch,分清稳定代码和非稳定代 ...

  7. 阿里JAVA开发手册零度的思考理解(一)

    转载请注明原创出处,谢谢! 缘由 阿里JAVA开发手册已经发表有很长时间了,值得认真研究思考推广 阿里官方的Java代码规范标准,这份开发手册不仅规范了一些开发细节,也提出了很多工程开发的哲学,值得好 ...

  8. 阅读阿里Java开发手册记录

    概述 在阅读完阿里Java开发手册(嵩山版)后,发现自己在开发过程中有一些没有按照规范开发的情况,这里将容易忘记的规范记录下来,并且添加自己的理解,一方面方便自己巩固记忆,另一方面希望对其他同学能够提 ...

  9. 阿里JAVA开发手册零度的思考理解(二)

    转载请注明原创出处,谢谢! 说在前面 人生的大道上默默地走,就必须要有一盏灯亮着为你引导方向!而这盏灯抑或只是一句话,一句鼓励,一个赞美,一次承认,一次认可,一次相识一次交流-- 上篇文章:阿里JAV ...

随机推荐

  1. django项目搭建及Session使用

    django+session+中间件 一.使用命令行创建django项目 在指定路径下创建django项目 django-admin startproject djangocommon   在项目目录 ...

  2. 单例模式的N种写法

    单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧.但是其中的坑却不少,所以也常作为面试题来考.本文主要对几种单例写法的整理,并分析其优缺点.很多都是一些老生常谈的问题,但如果你不知道如何 ...

  3. Android有趣的全透明效果--Activity及Dialog的全透明(附android系统自带图标大全)[转]

    原文地址:http://blog.csdn.net/sodino/article/details/5822147 1.Activity全透明 同学zzm给了这个有趣的代码,现在公布出来. 先在res/ ...

  4. [C++] Deep copy ,Shallow copy, copy constructor,"="

    Deep copy ,Shallow copy, copy constructor,"=" Dog.h #pragma once class Dog { public: char ...

  5. python 多继承详解-乾颐堂

    1 2 3 4 5 6 7 8 9 10 class A(object):    # A must be new-style class    def __init__(self):     prin ...

  6. [BAT] 通过命令行窗口重启或关闭远程电脑

    在命令行窗口输入“shutdown -s”, 关闭远程计算机 在命令行窗口输入“shutdown -r”, 重新启动远程计算机

  7. Mcrosoft中间语言的主要特征

    Mcrosoft中间语言显然在.NET FrameWork中起着非常重要的作用.现在讨论一下IL(Intermideate Language)的主要特征.因为面向.NET的所有语言在逻辑上都需要支持I ...

  8. ubuntu14.04下安装qt5

    1.sudo apt-get install build-essential 2.先打开终端快捷键ctrl+t 3. 然后输入: sudo apt-get install cmake qt5-defa ...

  9. 1、设备网络SDK主要功能

    图像预览.文件回放和下载,云台控制,布防/撤防,语音对讲,日志管理,解码卡,远程升级,远程重启/关闭,格式化硬盘,参数配置(系统配置,通道配置,串口配置,报警配置,用户配置),多路解码器,智能设备功能 ...

  10. python学习之内部执行流程,内部执行流程,编码(一)

    python的执行流程: 加载内存--->词法分析--->语法分析--->编译--->转换字节码---->转换成机器码---->供给CPU调度 python的编码: ...