阿里java开发规范学习(附P3C IDEA插件 帮助规范的养成)

简介: 浅析 阿里巴巴 Java 开发规约 (未完成)contents为什么要学编程规约P3C IDEA 插件why-use我们知道,一般稍微大一点的公司,都会在系统架构设计完成之后,编码工作开始之前,给出一份属于自家公司,或是自家团队给出的编码规范文...

浅析 阿里巴巴 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开发者都应该安装的插件。

目录
相关文章
|
2月前
|
Java
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
本文介绍了如何使用IDEA(IntelliJ IDEA)创建一个新的Java项目,并运行一个简单的Java程序输出"Hello Word"。文章详细展示了创建项目的步骤,包括选择JDK版本、设置项目名称和路径、创建包和类,以及编写和运行代码。最后,还展示了如何通过IDEA的运行功能来执行程序并查看输出结果。
141 4
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
|
1月前
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
62 0
|
7天前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
52 6
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
22天前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
30 6
|
1月前
|
Java Maven Spring
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
这篇文章介绍了在IntelliJ IDEA社区版中创建Spring Boot项目的三种方法,特别强调了第三种方法的详细步骤。
288 0
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
|
2月前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
2月前
|
安全 Oracle Java
edge浏览器加载java插件
edge浏览器加载java插件
|
1月前
|
Oracle IDE Java
IDEA安装教程配置java环境(超详细)
IDEA安装教程配置java环境(超详细)
|
3月前
|
前端开发 Java Maven
【前端学java】全网最详细的maven安装与IDEA集成教程!
【8月更文挑战第12天】全网最详细的maven安装与IDEA集成教程!
98 2
【前端学java】全网最详细的maven安装与IDEA集成教程!