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

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

演讲嘉宾简介:
澳明,阿里巴巴高级开发工程师。


以下内容根据演讲嘉宾视频分享以及PPT整理而成。

本次的分享主要围绕以下三个方面:

一、手册简介
二、聊聊语言
三、P3C项目

一、手册简介
下面主要从三个方面介绍阿里巴巴为什么需要这个Java开发手册。第一个方面,其实是协作效率的问题。众所周知,秦朝统一时期,推出了“车同轨,书同文”的法令,事实上,这个法令背后的目的是让整个国家人民做事的方式进行统一。那么在现在,比如对于一个公司而言,一些规范的不一致可能会导致很多问题,不仅仅是个人与个人之间,甚至让部门与部门之间会出现不必要的沟通损耗和沟通壁垒。
第二个方面其实是在系统质量方面。在阿里巴巴,这种不规范编码导致的线上故障非常非常多,在整个线上故障的比率也非常高。所以,阿里巴巴希望能够统一整个集团的编码规范,进而能够提升整体的系统质量。
第三个方面,工匠精神。阿里巴巴希望工程师们具备一个工匠精神。即希望工程师非常非常认真的对待编码过程及编码产物。因为无论怎么样设计Java开发手册,它所包含的条目始终是有限的,是一个死的东西,更多的希望大家能够体会的是Java开发手册背后的思想,因为背后的思想其实是可以举一反三,灵活运用的。阿里巴巴希望工程师们可以具备这样一种工匠精神,能够不断的认真打磨好自己的代码。
7f08302bcf2087324e6c54c87633b70ba281c1e8
目前,Java开发手册分为七大部分,下图中的七大部分在日常的开发中是非常通用的。大家可以依据这七条规约,逐步逐步的从第一条规约低阶往高阶去进展。与大家平时开发项目一样,比如说,在最开始编码时,可以参考编程规约;然后我们在编程过程中,考虑异常场景时,那么可以考虑异常日志规约;在写单元测试时,可以参考单元测试规约;比如说,在整体的架构设计完毕并且代码开发完毕之后,对于其非功能性需求,比如安全方面的问题,可以参考安全规约;那么在与数据库进行交互时,可以参考MySQL数据库规约;有的时候,在整个一个大的公司内部,希望大家的工程结果能够统一,这样的话大家在阅读别人的代码,或者说复用别人的代码的时候会非常的直观和方便,这时候可以参考工程规约;最后一个设计规约,指在设计软件,设计程序和设计架构时可以参照一些规约。
9ea65369d5edf5537e75e1022901ecd65cf2a6f0
尽管我们的Java开发手册页数不是很多,之所以称之为手册,是希望大家方便阅读,可以当做枕边书,业余时间翻一翻。手册中除了一些制定的规约内容,还提到了很多工程师会遇到的问题场景。这些问题场景中有一部分也结合了阿里巴巴近年来的真实案例,目的是让大家能够更好的理解规约,更重要的是理解规约背后的所体现的思想。这本Java开发手册虽然不厚,但是相信对于刚入门学习Java的同学,可以尝试阅读并体会,肯定会对大家有所帮助,并在编程规范的形成上有很大提高。

二、聊聊语言
1.面向对象语言与面向过程语言的区别
大家应该知道Java是面向对象的语言,也叫做OOP。那么面向对象语言和面向过程的语言有什么区别呢?在实现某个动作时,无论是使用面向对象语言或者面向过程的语言都可以实现,那么为什么说面向过程比较直观,比较方便呢?下面来简单举例说明。首先确定需求,比如说想开一个门,在面向过程的程序设计里,很有可能是一个Open行为或者叫Open函数的一个动作的实现,然后Open依赖的数据结构是Door对象,那么这个开门的动作就非常简单,直接Open the door。在面向对象的程序中,直接将对象Door设计出来,然后在赋予对象一些行为,如Open。
Open the door,这是面向过程的代码,可以认为Door其实是一个数据结构,我们可以很方便的再添加面向过程的代码,如添加新函数,比如Close the door。那么在面向对象的代码中,更多的是在不同的数据结构中,实现Open这一功能。简而言之,面向对象的语言更希望把操作的行为附加在不同的抽象类之上。
下图中摘抄了我们的一本书,《代码整洁之道》中的一段话“面向过程的代码便于在不改动既有数据结构的前提下添加函数,面向对象代码便于不改动既有函数的前提下添加类。反之,过程式代码难以添加新数据结构,面向对象代码难以添加新函数,因为必须修改所有类。对于面向对象比较南的事情,对于面向过程的代码比较容易,反之亦然。”
6c1826f86c2ce32b4ce52a11d7d5a822bd7eaed8

2.异常行为
我们相信大多数开发者都可以写出能够正常运行的代码,这是大家非常非常擅长做的事情。但是并不是所有的开发者都能够把异常处理的非常非常好。因为大家喜欢写按既定的流程能够正确执行的程序,但往往忽略了很多异常的情况。下面带大家从Java语言方面尝试理解一下它是如何对于异常行为进行抽象和设计的。举个简单例子,从旅游坐飞机说起,正常的流程应该是坐飞机起飞,那么想象一下中途有哪些异常场景出现。第一种情况,机场被恐怖份子袭击发生爆炸,虽然机率非常低,但也有可能发生。这种情况相当于发生非常严重的错误,对应在平时开发过程中,其实是系统级别的异常,比如磁盘坏掉,机器宕掉,网络断掉。第二种,假设机场是OK的,但是在去机场的路上,突然之间道路出现拥堵的情况,本来30分钟的路程,额外增加了1个小时的时间,所以必须换成其他交通工具赶到机场。这种相当于编程时异常,这类异常是可以有一些补救的措施的,如刚刚的场景中换成其他交通工具,从而继续让程序表现出我们理想的行为。系统异常与之不同的是,系统异常场景中开发者是没有补救方法的,几乎是无能为力的。第三种情况,假设顺利到达机场,但是护照被拒签无法登机,与上面几种异常不同的是,这种护照被拒签是可以被预测到的,大家都知道是有这种可能的,这种异常场景叫做预检时场景。最后一种,在登机口准备登机时扫描器发生故障,虽然这种异常也算作突发异常,但是是可以登机的。因为这种异常最终会以一种信息方式让机场的维修师会来解决,或者换另一个登机口登机,这类异常叫做可透出异常。
在Java中出现的异常其实可以对上上面的四种异常。首先,第一层级会被抽象为错误和异常,然后异常分为检查异常和未检查异常。大家如果把Java中的异常跟图中的异常进行结合,相信大家会有一些新的输入和理解。
593b3d552599cf7dbf64222ab9aaa7a44c205fcb


三、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开发手册的在线免费下载版本和淘宝购买地址。
9e161495af0508647fa0d6fd581945bfd6bdf772

本文由云栖志愿小组董黎明整理,编辑百见
目录
相关文章
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第17天】本文详细介绍了Java编程中Map的使用,涵盖Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的并发处理和性能优化技巧,适合初学者和进阶者学习。
52 3
|
3月前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
68 2
|
14天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
20天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
26天前
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
66 5
|
23天前
|
安全 Java 调度
Java中的多线程编程入门
【10月更文挑战第29天】在Java的世界中,多线程就像是一场精心编排的交响乐。每个线程都是乐团中的一个乐手,他们各自演奏着自己的部分,却又和谐地共同完成整场演出。本文将带你走进Java多线程的世界,让你从零基础到能够编写基本的多线程程序。
32 1
|
1月前
|
Java 数据处理 开发者
Java多线程编程的艺术:从入门到精通####
【10月更文挑战第21天】 本文将深入探讨Java多线程编程的核心概念,通过生动实例和实用技巧,引导读者从基础认知迈向高效并发编程的殿堂。我们将一起揭开线程管理的神秘面纱,掌握同步机制的精髓,并学习如何在实际项目中灵活运用这些知识,以提升应用性能与响应速度。 ####
45 3
|
2月前
|
Java
Java中的多线程编程:从入门到精通
本文将带你深入了解Java中的多线程编程。我们将从基础概念开始,逐步深入探讨线程的创建、启动、同步和通信等关键知识点。通过阅读本文,你将能够掌握Java多线程编程的基本技能,为进一步学习和应用打下坚实的基础。
|
2月前
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
51 1
java制作游戏,如何使用libgdx,入门级别教学
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
49 4
下一篇
无影云桌面