Google Java 风格指南(Google Java Style Guide)

本文详细介绍了Google的Java编程语言源代码风格指南,涵盖了文件命名、编码、结构、格式化、命名约定等多个方面。强调了遵循规则的重要性,以提高代码可读性和维护性。特别指出,非空块应采用K&R风格,每行不超过100个字符,类和方法名称采用UpperCamelCase,常量名全大写并用下划线分隔,注释和Javadoc的使用也有明确指导。
摘要由CSDN通过智能技术生成

:文章由于在博客园上阅读页面带点卡顿,所以在此发了一下,可能是由于我在博客园的博客自定义设置影响整体页面的加载。

官方地址 google.github.io

本文档作为 Google 的 Java™ 编程语言源代码编码标准的完整定义。当且仅当它遵守此处的规则时,Java 源文件才被描述为 Google 风格。

前言

声明:在原文挡基础上做了一次翻译并总结了一下具体内容,换了一下排版样式等等。

在此也参考了另外一篇已经有很长时间的翻译版:https://hawstein.com/2014/01/20/google-java-style/

要提一点的是,国内的话可能更熟悉阿里的开发手册📎Java开发手册(嵩山版).pdf或者《Effective Java》
(Gitee:https://gitee.com/lin-mt/effective-java-third-edition
在线网阅读的一个网站:https://www.mianshigee.com/tutorial/effective-java-3rd-chinese/docs-readme.md

所以Google的开发规范可能不怎么熟悉,甚至和我一样有点感觉不习惯。毕竟只是一种形式而已,不能说用了Google规范,就可以进谷歌,甚至代码更流畅,只能说,相互参照一些内容,可以让代码更方便阅读以及维护吧。

(不过,个人可能还是习惯了国内的阿里,Effective java 这本书还没有看完,唉,还是太懒了)


一、简介

本文档作为 Google 的 Java™ 编程语言源代码编码标准的**完整定义。**当且仅当它遵守此处的规则时,Java 源文件才被描述为 Google 风格。

与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。然而,这份文档主要侧重于我们所普遍遵循的规则, 对于那些不是明确强制要求的,我们尽量避免提供意见。

1.1 术语说明

在本文件中,除非另有说明:

  1. 术语 *class* 包含地用于表示 “普通” 类、枚举类、接口或注解类型 ( @interface)。
  2. 术语成员(of a class)包含性地用于表示嵌套的类、字段、方法或构造函数;也就是说,除了初始化程序和注释之外的类的所有顶级内容。
  3. 术语comment只用来指代实现的注释(implementation comments),我们不使用“documentation comments”一词,而是用Javadoc。

1.2 指导说明

本文档中的示例代码是非规范的。也就是说,虽然这些示例采用 Google 风格,但它们可能无法说明表示代码的唯一***时尚方式。示例中的可选格式选择不应作为规则强制执行*。(不强制你使用这种规范)


二、源文件基础

2.1 文件名

源文件以其最顶层的类名来命名,大小写敏感,文件扩展名为.java。

2.2 文件编码:UTF-8

源文件以 UTF-8 编码。

2.3 特殊字符

2.3.1 空白字符

除了行终止符序列之外,ASCII 水平空格字符 ( 0x20 ) 是唯一出现在源文件中任何位置的空白字符。这意味着:

  1. 字符串和字符文字中的所有其他空白字符都被转义。
  2. 制表符用于缩进。

2.3.2 特殊转义序列

对于任何具有 特殊转义序列\b\t\n\f\r、 和 )的字符\", 将使用该序列而不是相应的八进制(例如 )或 Unicode(例如 )转义。\'``\\``\012``\u000a

2.3.3 非 ASCII 字符

对于剩余的非 ASCII 字符,使用实际的 Unicode 字符(例如 )或等效的 Unicode 转义 符(例如 ) \u221。选择仅取决于使代码更易于阅读和理解的方式,尽管强烈建议不要使用 Unicode 转义字符串文字和注释。

**提示:**在 Unicode 转义情况下,有时甚至在使用实际的 Unicode 字符时,解释性注释也会很有帮助。

例子 讨论
String unitAbbrev = "μs"; 最佳:即使没有注释也非常清楚。
String unitAbbrev = "\u03bcs"; // "μs" 允许,但没有理由这样做。
String unitAbbrev = "\u03bcs"; // Greek letter mu, "s" 允许,但尴尬且容易出错。
String unitAbbrev = "\u03bcs"; 很差:读者不知道这是什么。
return '\ufeff' + content; // byte order mark 好:对不可打印的字符使用转义符,并在必要时进行注释。

提示: 永远不要由于害怕某些程序可能无法正确处理非ASCII字符而让你的代码可读性变差。当程序无法正确处理非ASCII字符时,它自然无法正确运行, 你就会去fix这些问题的了。(言下之意就是大胆去用非ASCII字符,如果真的有需要的话)


三、源文件结构

源文件按顺序包括:

  1. 许可或版权信息(如果需要)
  2. 包装声明(package语句)
  3. 导入语句(import语句)
  4. 一个顶级类(只有一个)

恰好一个空行分隔存在的每个部分(以上每个部分之间用一个空行隔开)。

3.1 许可或版权信息(如果需要)

如果一个文件包含许可证或版权信息,那么它应当被放在文件最前面。

3.2 包装声明(package语句)

package语句不换行,列限制(4.4节)并不适用于package语句。(即package语句写在一行里)

3.3 导入语句(import语句)

3.3.1 import不要使用通配符

即,不要出现类似这样的import语句:import java.util.*;

3.3.2 无换行

import语句不换行,列限制(4.4节,列限制:100)并不适用于import语句。(每个import语句独立成行)

3.3.3 排序和间距

import的顺序如下。

  1. 所有的静态导入在一个区块中。

  2. 所有非静态进口在一个区块中。

如果同时有静态和非静态的导入,则用一个空行来分隔这两个块。在导入语句之间没有其他空行。

每个区块中,导入的名字以ASCII排序方式出现。(注意:这与导入语句的ASCII排序不同,因为’.‘排序在’;'之前)

3.3.4 没有静态导入的类

静态导入不用于静态嵌套类。它们是用普通的导入方式导入的。

关于静态导入可参考这篇文章:https://www.cnblogs.com/mengdd/archive/2013/01/23/2873312.html

百度知道 解释:

img

3.4 类声明

3.4.1 只有一个顶层类的声明

每个顶层类都驻留在一个自己的源文件中。

3.4.2 类内容的排序

你为你的类的成员和初始化器选择的顺序对可学习性有很大影响。然而,如何做到这一点并没有一个正确的秘诀;不同的类可能会以不同的方式排列其内容。

重要的是,每个类都使用一些逻辑顺序,如果有人问起,其维护者可以解释。例如,新的方法不会被习惯性地添加到类的末尾,因为这将产生 "按添加日期的时间顺序 "排序,而这并不是一个逻辑排序

3.4.2.1 重载:从不拆分

当一个类有多个构造函数或多个同名方法时,这些方法会按顺序出现,中间没有其他代码(甚至没有私有成员)


四、格式化

术语说明:类块结构是指类、方法或构造函数的主体。请注意,根据第4.8.3.1节关于数组初始化器的规定,任何数组初始化器都可以选择性地被当作类块结构来处理

4.1 大括号

4.1.1 在可选的地方使用大括号

大括号用于if、else、for、do和while语句,即使主体为空或只包含一条语句``

4.1.2 非空块:K & R 风格

大括号遵循 Ke

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值