摘要: 本文带大家简单理解阿里巴巴Java开发手册中的规约内容以及P3C项目,可以帮助开发者扫描出所有潜在的代码隐患。在中间也聊了一些对于不同语言设计的理解,如何去看待语言的设计,其实是我们去学习一个语言的核心。

演讲嘉宾简介:
澳明,阿里巴巴高级开发工程师。
本次直播视频精彩回顾,戳这里!
以下内容根据演讲嘉宾视频分享以及PPT整理而成。
本次的分享主要围绕以下三个方面:
一、手册简介
二、聊聊语言
三、P3C项目
一、手册简介
下面主要从三个方面介绍阿里巴巴为什么需要这个Java开发手册。第一个方面,其实是协作效率的问题。众所周知,秦朝统一时期,推出了“车同轨,书同文”的法令,事实上,这个法令背后的目的是让整个国家人民做事的方式进行统一。那么在现在,比如对于一个公司而言,一些规范的不一致可能会导致很多问题,不仅仅是个人与个人之间,甚至让部门与部门之间会出现不必要的沟通损耗和沟通壁垒。
第二个方面其实是在系统质量方面。在阿里巴巴,这种不规范编码导致的线上故障非常非常多,在整个线上故障的比率也非常高。所以,阿里巴巴希望能够统一整个集团的编码规范,进而能够提升整体的系统质量。
第三个方面,工匠精神。阿里巴巴希望工程师们具备一个工匠精神。即希望工程师非常非常认真的对待编码过程及编码产物。因为无论怎么样设计Java开发手册,它所包含的条目始终是有限的,是一个死的东西,更多的希望大家能够体会的是Java开发手册背后的思想,因为背后的思想其实是可以举一反三,灵活运用的。阿里巴巴希望工程师们可以具备这样一种工匠精神,能够不断的认真打磨好自己的代码。
目前,Java开发手册分为七大部分,下图中的七大部分在日常的开发中是非常通用的。大家可以依据这七条规约,逐步逐步的从第一条规约低阶往高阶去进展。与大家平时开发项目一样,比如说,在最开始编码时,可以参考编程规约;然后我们在编程过程中,考虑异常场景时,那么可以考虑异常日志规约;在写单元测试时,可以参考单元测试规约;比如说,在整体的架构设计完毕并且代码开发完毕之后,对于其非功能性需求,比如安全方面的问题,可以参考安全规约;那么在与数据库进行交互时,可以参考MySQL数据库规约;有的时候,在整个一个大的公司内部,希望大家的工程结果能够统一,这样的话大家在阅读别人的代码,或者说复用别人的代码的时候会非常的直观和方便,这时候可以参考工程规约;最后一个设计规约,指在设计软件,设计程序和设计架构时可以参照一些规约。
尽管我们的Java开发手册页数不是很多,之所以称之为手册,是希望大家方便阅读,可以当做枕边书,业余时间翻一翻。手册中除了一些制定的规约内容,还提到了很多工程师会遇到的问题场景。这些问题场景中有一部分也结合了阿里巴巴近年来的真实案例,目的是让大家能够更好的理解规约,更重要的是理解规约背后的所体现的思想。这本Java开发手册虽然不厚,但是相信对于刚入门学习Java的同学,可以尝试阅读并体会,肯定会对大家有所帮助,并在编程规范的形成上有很大提高。
二、聊聊语言
1.面向对象语言与面向过程语言的区别
大家应该知道Java是面向对象的语言,也叫做OOP。那么面向对象语言和面向过程的语言有什么区别呢?在实现某个动作时,无论是使用面向对象语言或者面向过程的语言都可以实现,那么为什么说面向过程比较直观,比较方便呢?下面来简单举例说明。首先确定需求,比如说想开一个门,在面向过程的程序设计里,很有可能是一个Open行为或者叫Open函数的一个动作的实现,然后Open依赖的数据结构是Door对象,那么这个开门的动作就非常简单,直接Open the door。在面向对象的程序中,直接将对象Door设计出来,然后在赋予对象一些行为,如Open。
Open the door,这是面向过程的代码,可以认为Door其实是一个数据结构,我们可以很方便的再添加面向过程的代码,如添加新函数,比如Close the door。那么在面向对象的代码中,更多的是在不同的数据结构中,实现Open这一功能。简而言之,面向对象的语言更希望把操作的行为附加在不同的抽象类之上。
下图中摘抄了我们的一本书,《代码整洁之道》中的一段话“面向过程的代码便于在不改动既有数据结构的前提下添加函数,面向对象代码便于不改动既有函数的前提下添加类。反之,过程式代码难以添加新数据结构,面向对象代码难以添加新函数,因为必须修改所有类。对于面向对象比较南的事情,对于面向过程的代码比较容易,反之亦然。”
2.异常行为
我们相信大多数开发者都可以写出能够正常运行的代码,这是大家非常非常擅长做的事情。但是并不是所有的开发者都能够把异常处理的非常非常好。因为大家喜欢写按既定的流程能够正确执行的程序,但往往忽略了很多异常的情况。下面带大家从Java语言方面尝试理解一下它是如何对于异常行为进行抽象和设计的。举个简单例子,从旅游坐飞机说起,正常的流程应该是坐飞机起飞,那么想象一下中途有哪些异常场景出现。第一种情况,机场被恐怖份子袭击发生爆炸,虽然机率非常低,但也有可能发生。这种情况相当于发生非常严重的错误,对应在平时开发过程中,其实是系统级别的异常,比如磁盘坏掉,机器宕掉,网络断掉。第二种,假设机场是OK的,但是在去机场的路上,突然之间道路出现拥堵的情况,本来30分钟的路程,额外增加了1个小时的时间,所以必须换成其他交通工具赶到机场。这种相当于编程时异常,这类异常是可以有一些补救的措施的,如刚刚的场景中换成其他交通工具,从而继续让程序表现出我们理想的行为。系统异常与之不同的是,系统异常场景中开发者是没有补救方法的,几乎是无能为力的。第三种情况,假设顺利到达机场,但是护照被拒签无法登机,与上面几种异常不同的是,这种护照被拒签是可以被预测到的,大家都知道是有这种可能的,这种异常场景叫做预检时场景。最后一种,在登机口准备登机时扫描器发生故障,虽然这种异常也算作突发异常,但是是可以登机的。因为这种异常最终会以一种信息方式让机场的维修师会来解决,或者换另一个登机口登机,这类异常叫做可透出异常。
在Java中出现的异常其实可以对上上面的四种异常。首先,第一层级会被抽象为错误和异常,然后异常分为检查异常和未检查异常。大家如果把Java中的异常跟图中的异常进行结合,相信大家会有一些新的输入和理解。
三、P3C项目
大家可能会困惑P3C到底是什么?实际上,P-3C是世界知名反潜机,它有美国克洛希德公司在民用客机的基础上改进而来,绰号“猎户”。“猎户”诞生至今已经40多年了,尽管是一员老将,但在海湾战争中,它还是披挂上阵,为多国部队提供了大量情报。因为它是非常经典的反潜机,所以阿里巴巴也以它作为项目的代号,其中的寓意是以Java开发手册为前提扫描出所有潜在的代码隐患。那么阿里巴巴为何要成立这个项目?主要原因是因为如果单纯地制定了Java开发手册里面的一些规范,它其实是类似于意识形态上的东西,飘在空中,通过口头传达这些规范很难落地,仍然无法保证在开发过程中,不会再犯此类错误。所以在阿里巴巴内部,当时成立了P3C项目组,希望依托于Java开发手册,能够把内容,以及平时的扫描,还有IDE进行一些集成的工作,从而让我们的开发人员能够保证遵循我们的Java开发手册进行工作。
下图中给出了P3C项目地址,放在了Github上。其中主要包含三个部分,第一部分是就是开发手册的扫描问题的实现,是基于PMD实现的。第二部分是IntelliJ IDEA plugin,是一个Java IDE的插件。第三部分是Eclipse的插件。插件的部分会实时的在开发过程中,扫描出的代码中不满足Java开发手册内容的一些代码。
P3C项目目前非常火爆,在刚刚宣布了开源之后,整个社区活跃度是非常之高的。推荐大家也访问一下P3C项目,首先大家可以下载都自己的IDE中集成起来,这样会对大家平时编码的规范性有个很好的督促作用,另外这里也给出了Java开发手册的在线免费下载版本和淘宝购买地址。

作者:mongolguier

原文链接

本文为云栖社区原创内容,未经允许不得转载。

云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍相关推荐

  1. Linux中的Java类,Java基础入门学习-Java中类的属性

    Java基础入门学习-Java中类的属性 发布时间:2006-05-27 00:46:15来源:红联作者:WWW Public.private.protected显示了三种类中的属性和服务的类型,pu ...

  2. python3.6下载百度云_Python3.6零基础入门与爬虫案例开发教程

    全网最热的Python3入门+进阶 第1章 Python入门导学 介绍Python的特性.优点.缺点.前景以及课程的内容.重点和特色. 第2章 Python环境安装 一键安装Python的编译环境,写 ...

  3. 大数据必学Java基础(三十三):面向对象介绍

    文章目录 面向对象介绍 一.面向过程和面向对象的区别 二.类和对象的关系

  4. Java基础入门--学习笔记

    Java基础入门教程 itheima–java基础小白教程 学习配套软件:eclipse 1.基础知识 (1)常用DOS命令:切换盘–>E:,cd–>进入文件,可多级,cd - --> ...

  5. Java实习生常规技术面试题每日十题Java基础(三)

    目录 1.是否可以从一个static方法内部发出对非static方法的调用? 2.Integer与int的区别? 3.Overload和Override的区别.参数列表相同,返回值不同的方法,是否是重 ...

  6. JAVA中整型常量的长度,Java基础入门篇(三)——Java常量、变量,

    Java基础入门篇(三)--Java常量.变量, 一.Java常量 (一)什么是常量 常量指的是在程序中固定不变的值,是不能改变的数据.在Java中,常量包括整型常量.浮点型常量.布尔常量.字符常量等 ...

  7. 叮!您收到一份超值Java基础入门资料!

    摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家J ...

  8. 叮!您收到一份超值Java基础入门资料! 1

    Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家Java ...

  9. Java 基础入门,小白提升路线图

    1000+最新Java面试题 获取学习路线资料啦 Java的基础知识就像我们所住的房子的地基,如果地基不稳,上面所盖的楼房再宏伟,也是没人敢去入住的,同理Java的基础不牢固,以后也很难成为真正意义上 ...

  10. Java基础入门:IDEA软件安装和软件初始化设置

    IDEA是一个专门针对Java的集成开发工具(IDE),由Java语言编写.所以,需要有JRE运行环境并配置好环境变量. 它可以极大地提升我们的开发效率.可以自动编译,检查错误.在公司中,使用的就是I ...

最新文章

  1. 按钮右对齐_9张图,学会Excel中的对齐技巧
  2. 编译原理【实验1——扫描器的设计与实现】
  3. oracle如何处理死锁,Oracle死锁处理实例
  4. 漫步微积分三十一——定积分的直观含义
  5. mysql创建数据库schooldb_mysql创建新用户和数据库
  6. jq中ajax请求跨域,用JQuery实现简单的Ajax跨域请求
  7. JAVA线程并发数量控制_Java并发工具类(三):控制并发线程数的Semaphore
  8. 人生时间计算器_卡西欧计算器见证你与时间赛跑,计算人生,把握人生!
  9. ps打开闪退_Photoshop2020安装教程,会安装软件是学ps的前提
  10. Discuz论坛程序用户如何删除自己的帖子?
  11. word中插入公式2010和2016两个版本)
  12. 360路由器的虚拟服务器设置,360路由器手机设置方法 | 192路由网
  13. html radio vue,Vue.js选中动态绑定的radio的指定项_心病_前端开发者
  14. WiFi-ESP8266入门http(3-2)网页认证上网-post请求
  15. 歌唱大赛选手成绩计算
  16. (个人笔记-无用勿喷)Windows软件包的安装与卸载
  17. 查看FILEZILLA的快速连接密码
  18. NOI题库 数论 相关的题目 汇总-2022.01.22
  19. Vue/React项目的package.json文件scripts命令解析
  20. win10 SystemParametersInfo 设置屏保 不好使_Win10系统游戏优化

热门文章

  1. java代码中 作用_Java利用开发中代码生成工具的作用
  2. 华为app安装失败与已安装签名_手机APP为什么总是安装失败
  3. mysql utf8mb4 造成慢_mysql使用utf8mb4经验吐血总结
  4. 江苏成教计算机统考操作题多少分,江苏省成人计算机统考试题,操作题.doc
  5. java 开发帮助_java的简单编程请帮助
  6. 日语输入法电脑版_日语轻松入门小百科
  7. 18张颠覆三观的照片!
  8. 读博和不读博的理由是什么?
  9. 数学从根本上:玩的是概念!而不是技巧
  10. 90后副教授一作发Science,刷新该校历史