Google Java代码规范

原文地址:https://google.github.io/styleguide/javaguide.html

GIthub上GoogleCode风格的配置文件(支持Eclipse IDE和IntelliJ IDE):https://github.com/codeset/google-java-styleguide

1简介

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

与其他编程风格指南一样,所涵盖的问题不仅包括格式化的美学问题,也包括其他类型的约定或编码标准。但是,本文档主要关注我们普遍遵循的快速规则 ,并避免提供不可明确强制执行的建议(无论是通过人工还是工具)。

1.1术语注释

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

  1. 术语被包含性地用于表示“普通”类,枚举类,接口或注释类型( @interface )。
  2. 术语成员 (类的)包含地用于表示嵌套类,字段,方法或构造函数 ;即除了初始化器和注释之外的类的所有顶级内容。
  3. 术语注释总是指实现注释。 我们不使用短语“文档注释”,而是使用通用术语“Javadoc”。

其他“术语说明”将偶尔出现在整个文档中。

1.2指南说明

本文档中的示例代码是非规范的 。 也就是说,虽然示例是在Google风格,但它们可能不会说明代表代码的唯一时尚的方式。 示例中所做的可选格式选择不应作为规则强制执行。

2源文件基础

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(例如\u000a )转义。

2.3.3非ASCII字符

对于剩余的非ASCII字符,使用实际的Unicode字符(例如 )或等效的Unicode转义(例如\u221e )。 选择仅取决于哪些使得代码更容易阅读和理解 ,尽管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字符而使您的代码变得不可读。如果这应该发生,那些程序被打破 ,它们必须是固定的 。

3源文件结构

源文件由以下顺序组成 :

  1. 许可或版权信息(如果存在)
  2. 软件包语句
  3. 导入语句
  4. 完全一个顶级类

正好一个空白线分隔存在的每个部分。

3.1许可或版权信息(如果存在)

如果许可证或版权信息属于文件,则它属于此处。

3.2包装声明

包语句不是线包装 。 列限制(第4.4节, 列限制:100 )不适用于包语句。

3.3导入语句

3.3.1无通配符导入

不使用静态或其他方式的通配符导入 。

3.3.2没有线包装

导入语句不是线包装的 。 列限制(第4.4节, 列限制:100 )不适用于import语句。

3.3.3订购和间距

导入顺序如下:

  1. 在单个块中的所有静态导入。
  2. 所有非静态导入在单个块中。

如果存在静态和非静态导入,则单个空白行分隔两个块。 import语句之间没有其他空行。

在每个块中,导入的名称以ASCII排序顺序显示。 ( 注意:这与以ASCII排序顺序的import 语句不同 ,因为'。'排在';'前面)。

3.3.4没有类的静态导入

静态导入不用于静态嵌套类。 它们以正常进口进口。

3.4类声明

3.4.1完全一个顶级类声明

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

3.4.2类内容的排序

为类的成员和初始化器选择的顺序可以对可学习性有很大的影响。 然而,没有一个正确的方法来做到这一点; 不同的类可以以不同的方式对其内容进行排序。

重要的是每个类使用一些逻辑顺序 ,维护者可以解释如果问。例如,新方法不仅习惯性地添加到类的末尾,因为这将产生“按照添加日期的顺序”排序,这不是逻辑排序。

3.4.2.1重载:从不分裂

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

4格式化

术语注意: 块状构造指的是类,方法或构造函数的主体。注意,通过关于数组初始化器的第4.8.3.1节,任何数组初始化器都可以被视为块状构造。

4.1大括号

4.1.1在可选时使用括号

大括号与if ,else ,for ,dowhile语句一起使用,即使主体为空或仅包含单个语句。

4.1.2非空块:K&R风格

大括号遵循Kernighan和Ritchie风格(“ 埃及括号 ”)用于非空块和块状结构:

  • 在大括号前没有换行符。
  • 开头大括号后的换行符。
  • 换行前的换行。
  • 关闭大括号后的换行符, 仅当该大括号终止语句或终止方法,构造函数或命名类的主体时。例如,如果后面跟着else或逗号,那么大括号后面没有换行符。

例子:

[java]  view plain  copy
  1. return () -> {  
  2.   while (condition()) {  
  3.     method();  
  4.   }  
  5. };  
  6.   
  7. return new MyClass() {  
  8.   @Override public void method() {  
  9.     if (condition()) {  
  10.       try {  
  11.         something();  
  12.       } catch (ProblemException e) {  
  13.         recover();  
  14.       }  
  15.     } else if (otherCondition()) {  
  16.       somethingElse();  
  17.     } else {  
  18.       lastThing();  
  19.     }  
  20.   }  
  21. };  


枚举类的一些例外在第4.8.1节“枚举类”中给出。

4.1.3空块:可能简洁

空块或块状构造可以是K&R样式(如第4.1.2节所述)。或者,它可以在打开后立即关闭,在({} )之间没有字符或换行符,除非它是多块语句的一部分 (直接包含多个块:if/elsetry/catch/finally)。

例子:

[java]  view plain  
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值