├── README.md
├── SUMMARY.md
├── _book
├── GLOSSARY.html
├── gitbook
│ ├── app.js
│ ├── fonts
│ │ ├── fontawesome
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ └── fontawesome-webfont.woff
│ │ ├── merriweather
│ │ │ ├── 250.woff
│ │ │ ├── 250i.woff
│ │ │ ├── 400.woff
│ │ │ ├── 400i.woff
│ │ │ ├── 700.woff
│ │ │ ├── 700i.woff
│ │ │ ├── 900.woff
│ │ │ └── 900i.woff
│ │ └── opensans
│ │ │ ├── 300.woff
│ │ │ ├── 300i.woff
│ │ │ ├── 400.woff
│ │ │ ├── 400i.woff
│ │ │ ├── 600.woff
│ │ │ ├── 600i.woff
│ │ │ ├── 700.woff
│ │ │ └── 700i.woff
│ ├── images
│ │ ├── apple-touch-icon-precomposed-152.png
│ │ └── favicon.ico
│ ├── plugins
│ │ └── gitbook-plugin-mathjax
│ │ │ └── plugin.js
│ ├── print.css
│ └── style.css
├── glossary_index.json
├── index.html
└── search_index.json
├── config.json
├── cover
├── background.jpg
└── logo.png
├── formatting
├── README.md
├── annotations.md
├── arrays.md
├── block-indentation.md
├── blocks-k-r-style.md
├── braces-always-used.md
├── braces-empty-blocks.md
├── braces.md
├── column-limit.md
├── comments.md
├── enum-classes.md
├── grouping-parentheses.md
├── horizontal-alignment.md
├── horizontal-whitespace.md
├── line-wrapping-indent.md
├── line-wrapping-where-to-break.md
├── line-wrapping.md
├── modifiers.md
├── one-statement-per-line.md
├── specific-constructs.md
├── switch.md
├── variable-declarations.md
├── vertical-whitespace.md
└── whitespace.md
├── introduction
├── README.md
├── guide-notes.md
└── terminology.md
├── javadoc
├── README.md
├── javadoc-at-clauses.md
├── javadoc-exception-overrides.md
├── javadoc-exception-self-explanatory.md
├── javadoc-formatting.md
├── javadoc-multi-line.md
├── javadoc-optional.md
├── javadoc-paragraphs.md
├── javadoc-where-required.md
└── summary-fragment.md
├── naming
├── README.md
├── camel-case.md
├── class-names.md
├── constant-names.md
├── identifier-names.md
├── local-variable-names.md
├── method-names.md
├── non-constant-field-names.md
├── package-names.md
├── parameter-names.md
├── specific-identifier-names.md
└── type-variable-names.md
├── programming-practices
├── README.md
├── caught-exceptions.md
├── finalizers.md
├── override-annotation.md
└── static-members.md
├── source-file-basics
├── README.md
├── file-encoding.md
├── file-name.md
├── non-ascii-characters.md
├── special-characters.md
├── special-escape-sequences.md
└── whitespace-characters.md
└── source-file-structure
├── README.md
├── class-declaration.md
├── class-member-ordering.md
├── copyright-statement.md
├── import-line-wrapping.md
├── import-ordering-and-spacing.md
├── import-statements.md
├── one-top-level-class.md
├── overloads-never-split.md
├── package-statement.md
└── wildcard-imports.md
/README.md:
--------------------------------------------------------------------------------
1 | # Google Java编程风格规范
2 |
3 | Google Java编程风格规范 gitbook 版本,内容来至Hastein的中文翻译。
4 |
5 | > > 作者:Hawstein
6 | 出处:[http://hawstein.com/posts/google-java-style.html](http://hawstein.com/posts/google-java-style.html)
7 |
8 |
--------------------------------------------------------------------------------
/SUMMARY.md:
--------------------------------------------------------------------------------
1 | # Summary
2 |
3 | * [说明](README.md)
4 | * [前言](introduction/README.md)
5 | * [术语说明](introduction/terminology.md)
6 | * [指南说明](introduction/guide-notes.md)
7 | * [源文件基础](source-file-basics/README.md)
8 | * [文件名](source-file-basics/file-name.md)
9 | * [文件编码:UTF-8](source-file-basics/file-encoding.md)
10 | * [特殊字符](source-file-basics/special-characters.md)
11 | * [空白字符](source-file-basics/whitespace-characters.md)
12 | * [特殊转义序列](source-file-basics/special-escape-sequences.md)
13 | * [非ASCII字符](source-file-basics/non-ascii-characters.md)
14 | * [源文件结构](source-file-structure/README.md)
15 | * [许可证或版权信息](source-file-structure/copyright-statement.md)
16 | * [package语句](source-file-structure/package-statement.md)
17 | * [import语句](source-file-structure/import-statements.md)
18 | * [import不要使用通配符](source-file-structure/wildcard-imports.md)
19 | * [不要换行](source-file-structure/import-line-wrapping.md)
20 | * [顺序和间距](source-file-structure/import-ordering-and-spacing.md)
21 | * [类声明](source-file-structure/class-declaration.md)
22 | * [只有一个顶级类声明](source-file-structure/one-top-level-class.md)
23 | * [类成员顺序](source-file-structure/class-member-ordering.md)
24 | * [格式](formatting/README.md)
25 | * [大括号](formatting/braces.md)
26 | * [使用大括号(即使是可选的)](formatting/braces-always-used.md)
27 | * [非空块:K & R 风格](formatting/blocks-k-r-style.md)
28 | * [空块:可以用简洁版本](formatting/braces-empty-blocks.md)
29 | * [块缩进:2个空格](formatting/block-indentation.md)
30 | * [一行一个语句](formatting/one-statement-per-line.md)
31 | * [列限制:80或100](formatting/column-limit.md)
32 | * [自动换行](formatting/line-wrapping.md)
33 | * [从哪里断开](formatting/line-wrapping-where-to-break.md)
34 | * [自动换行时缩进至少+4个空格](formatting/line-wrapping-indent.md)
35 | * [空白](formatting/whitespace.md)
36 | * [垂直空白](formatting/vertical-whitespace.md)
37 | * [水平空白](formatting/horizontal-whitespace.md)
38 | * [水平对齐:不做要求](formatting/horizontal-alignment.md)
39 | * [用小括号来限定组:推荐](formatting/grouping-parentheses.md)
40 | * [枚举类](formatting/specific-constructs.md)
41 | * [枚举类](formatting/enum-classes.md)
42 | * [变量声明](formatting/variable-declarations.md)
43 | * [数组](formatting/arrays.md)
44 | * [switch语句](formatting/switch.md)
45 | * [注解(Annotations)](formatting/annotations.md)
46 | * [注释](formatting/comments.md)
47 | * [Modifiers](formatting/modifiers.md)
48 | * [命名](naming/README.md)
49 | * [对所有标识符都通用的规则](naming/identifier-names.md)
50 | * [标识符类型的规则](naming/specific-identifier-names.md)
51 | * [包名](naming/package-names.md)
52 | * [类名](naming/class-names.md)
53 | * [方法名](naming/method-names.md)
54 | * [常量名](naming/constant-names.md)
55 | * [非常量字段名](naming/non-constant-field-names.md)
56 | * [参数名](naming/parameter-names.md)
57 | * [局部变量名](naming/local-variable-names.md)
58 | * [类型变量名](naming/type-variable-names.md)
59 | * [驼峰式命名法(CamelCase)](naming/camel-case.md)
60 | * [编程实践](programming-practices/README.md)
61 | * [@Override:能用则用](programming-practices/override-annotation.md)
62 | * [捕获的异常:不能忽视](programming-practices/caught-exceptions.md)
63 | * [静态成员:使用类进行调用](programming-practices/static-members.md)
64 | * [Finalizers: 禁用](programming-practices/finalizers.md)
65 | * [Javadoc](javadoc/README.md)
66 | * [格式](javadoc/javadoc-formatting.md)
67 | * [一般形式](javadoc/javadoc-multi-line.md)
68 | * [段落](javadoc/javadoc-paragraphs.md)
69 | * [Javadoc标记](javadoc/javadoc-at-clauses.md)
70 | * [摘要片段](javadoc/summary-fragment.md)
71 | * [哪里需要使用Javadoc](javadoc/javadoc-where-required.md)
72 | * [例外:不言自明的方法](javadoc/javadoc-exception-self-explanatory.md)
73 | * [例外:重载](javadoc/javadoc-exception-overrides.md)
74 | * [可选的Javadoc](javadoc/javadoc-optional.md)
75 |
76 |
--------------------------------------------------------------------------------
/_book/GLOSSARY.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Welcome in my book!
156 | 157 | 158 |`,并且它和第一个单词间没有空格。
4 |
5 |
--------------------------------------------------------------------------------
/javadoc/javadoc-where-required.md:
--------------------------------------------------------------------------------
1 | ### 7.3 哪里需要使用Javadoc
2 |
3 | 至少在每个public类及它的每个public和protected成员处使用Javadoc,以下是一些例外:
4 |
5 |
--------------------------------------------------------------------------------
/javadoc/summary-fragment.md:
--------------------------------------------------------------------------------
1 | ### 7.2 摘要片段
2 |
3 | 每个类或成员的Javadoc以一个简短的摘要片段开始。这个片段是非常重要的,在某些情况下,它是唯一出现的文本,比如在类和方法索引中。
4 |
5 | 这只是一个小片段,可以是一个名词短语或动词短语,但不是一个完整的句子。它不会以`A {@code Foo} is a...`或`This method returns...`开头, 它也不会是一个完整的祈使句,如`Save the record...`。然而,由于开头大写及被加了标点,它看起来就像是个完整的句子。
6 |
7 | > > Tip:一个常见的错误是把简单的Javadoc写成`/** @return the customer ID */`,这是不正确的。它应该写成`/** Returns the customer ID. */`。
8 |
9 |
--------------------------------------------------------------------------------
/naming/README.md:
--------------------------------------------------------------------------------
1 | ## 命名约定
2 |
3 |
--------------------------------------------------------------------------------
/naming/camel-case.md:
--------------------------------------------------------------------------------
1 | ### 5.3 驼峰式命名法(CamelCase)
2 |
3 | [驼峰式命名法](http://zh.wikipedia.org/wiki/%E9%A7%9D%E5%B3%B0%E5%BC%8F%E5%A4%A7%E5%B0%8F%E5%AF%AB)分大驼峰式命名法(`UpperCamelCase`)和小驼峰式命名法(`lowerCamelCase`)。 有时,我们有不只一种合理的方式将一个英语词组转换成驼峰形式,如缩略语或不寻常的结构(例如"IPv6"或"iOS")。Google指定了以下的转换方案。
4 |
5 | 名字从`散文形式`(prose form)开始:
6 |
7 | 1. 把短语转换为纯ASCII码,并且移除任何单引号。例如:"Müller’s algorithm"将变成"Muellers algorithm"。
8 | 2. 把这个结果切分成单词,在空格或其它标点符号(通常是连字符)处分割开。
9 | * 推荐:如果某个单词已经有了常用的驼峰表示形式,按它的组成将它分割开(如"AdWords"将分割成"ad words")。 需要注意的是"iOS"并不是一个真正的驼峰表示形式,因此该推荐对它并不适用。
10 | 3. 现在将所有字母都小写(包括缩写),然后将单词的第一个字母大写:
11 | * 每个单词的第一个字母都大写,来得到大驼峰式命名。
12 | * 除了第一个单词,每个单词的第一个字母都大写,来得到小驼峰式命名。
13 | 4. 最后将所有的单词连接起来得到一个标识符。
14 |
15 | 示例:
16 |
17 | Prose form Correct Incorrect
18 | ------------------------------------------------------------------
19 | "XML HTTP request" XmlHttpRequest XMLHTTPRequest
20 | "new customer ID" newCustomerId newCustomerID
21 | "inner stopwatch" innerStopwatch innerStopWatch
22 | "supports IPv6 on iOS?" supportsIpv6OnIos supportsIPv6OnIOS
23 | "YouTube importer" YouTubeImporter
24 | YoutubeImporter*
25 |
26 | 加星号处表示可以,但不推荐。
27 |
28 | > > Note:在英语中,某些带有连字符的单词形式不唯一。例如:"nonempty"和"non-empty"都是正确的,因此方法名`checkNonempty`和`checkNonEmpty`也都是正确的。
29 |
--------------------------------------------------------------------------------
/naming/class-names.md:
--------------------------------------------------------------------------------
1 | #### 5.2.2 类名
2 |
3 | 类名都以`UpperCamelCase`风格编写。
4 |
5 | 类名通常是名词或名词短语,接口名称有时可能是形容词或形容词短语。现在还没有特定的规则或行之有效的约定来命名注解类型。
6 |
7 | 测试类的命名以它要测试的类的名称开始,以`Test`结束。例如,`HashTest`或`HashIntegrationTest`。
8 |
9 |
--------------------------------------------------------------------------------
/naming/constant-names.md:
--------------------------------------------------------------------------------
1 | #### 5.2.4 常量名
2 |
3 | 常量名命名模式为`CONSTANT_CASE`,全部字母大写,用下划线分隔单词。那,到底什么算是一个常量?
4 |
5 | 每个常量都是一个静态final字段,但不是所有静态final字段都是常量。在决定一个字段是否是一个常量时, 考虑它是否真的感觉像是一个常量。例如,如果任何一个该实例的观测状态是可变的,则它几乎肯定不会是一个常量。 只是永远不`打算`改变对象一般是不够的,它要真的一直不变才能将它示为常量。
6 |
7 | // Constants
8 | static final int NUMBER = 5;
9 | static final ImmutableList