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

目录
相关文章
|
3月前
|
网络协议 Windows
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
这篇文章提供了解决IDEA插件下载慢或超时问题的方案,通过查找国内插件节点IP地址并修改本地hosts文件来加速下载。
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
|
2月前
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
73 0
|
17天前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
66 6
|
3月前
|
Java
可直接编辑jar包的IDEA插件-JarEditor
IDEA自带的反编译插件虽可查看jar包中的class文件,但无法直接编辑。为解决此问题,作者开发了JarEditor插件,可在IDEA中直接编辑jar文件内的class及资源文件,无需解压或手动编译。点击Jar Editor可修改代码,通过Save/Compile保存并编译,Build Jar则将更改写回jar包。该插件简化了jar包编辑流程,提高了开发效率。
209 4
可直接编辑jar包的IDEA插件-JarEditor
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
78 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
2月前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
33 6
|
2月前
|
Windows
IDEA如何查看已经安装的插件并删除
【10月更文挑战第1天】这段内容主要介绍了如何在IntelliJ IDEA中查看和删除已安装的插件。可以通过软件内的插件市场查看插件列表,包括插件名称、版本号和供应商等信息;也可以通过访问插件目录查看。删除插件则建议在插件市场中进行,包括禁用和卸载步骤,手动删除插件文件夹的方法不推荐,因为可能存在配置残留等问题。
572 11
|
2月前
|
人工智能 Java 数据库连接
IDEA开发 常用代码规范插件 常用辅助类插件
IDEA开发 常用代码规范插件 常用辅助类插件
55 0
|
3月前
|
缓存 算法 Java
【Java引用规范】强软引用
本文详细介绍了Java中引用的概念和作用,包括强引用、软引用、弱引用和虚引用,并探讨了不同引用类型在内存管理和垃圾回收中的特性与用途。强引用是最常见的引用类型,对象只要被引用就不会被垃圾回收;软引用适用于内存敏感的缓存场景,在内存不足时会被回收;弱引用在更早的垃圾回收阶段被清除;虚引用主要用于对象的finalize过程。文章通过示例代码和内存分析工具展示了软引用的具体应用和回收机制。
【Java引用规范】强软引用
|
3月前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解