Java学习笔记(四)——google java编程风格指南(上)
【前面的话】
年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油。好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自己还是一个人。
如果你想要学习关于编码风格方面的知识,建议直接阅读参考资料中的文章,比看我这里写的好多了,这是真心话,我只是写自己的笔记。便于自己在以后的编码中注意。
【问题背景】
在做开发工作的时候,总是被说编码风格不好,现在自己找了Google Java编程风格指南进行学习,希望可以写出清晰的代码。
【学习资料】
1. Google Java编程风格指南,作者:Hawstein
http://hawstein.com/posts/google-java-style.html
【知识汇总】
一、源文件编码格式为:UTF-8
二、一个源文件按照下面顺序出现:
- 许可证或版权信息--如果需要
- package语句--出现在一行之内,不能换行
- import语句
1)出现在一行之内,不能换行;
2)不要出现通配符;
3)顺序和间距:
a)所有的静态导入独立成组,import static java.lang.System.out;
b)com.google import(仅当这个源文件是在com.google包下)
c)第三方的包。每个顶级包为一组,字典序。例如:android,com,junit,org,sun。
d)java imports
e)javax imports
组内不空行,按字典序排列
4. 一个顶级类
1)有且只有一个
2)类成员的顺序——每个类应该以某种逻辑去排序它的成员,维护者应该要能解释这种排序逻辑,也就是不能习惯性的将新添加的方法总是放在最后面。重载不能够分开,当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按顺序出现在一起,中间不要放进其它函数方法。
以上四个部分之间用一个空行隔开
三、大括号
- 大括号与
if, else, for, do, while
语句一起使用,即使只有一条语句(或是空),也应该把大括号写上。 - 对于非空块遵循K & R 风格
1)左大括号前不换行
2)左大括号后换行
3)右大括号前换行
4)如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。例如,如果右大括号后面是else或逗号,则不换行。
3. 空块:可以用简洁版本
一个空的块状结构里什么也不包含,大括号可以简洁地写成{},不需要换行。例外:如果它是一个多块语句的一部分(if/else 或 try/catch/finally) ,即使大括号内没内容,右大括号也要换行。
四、每当开始一个新的块,缩进增加2个空格
五、一行一个语句
六、列限制:80或100
例外:
- 不可能满足列限制的行(例如,Javadoc中的一个长URL,或是一个长的JSNI方法参考)。
- package和import语句
- 注释中那些可能被剪切并粘贴到shell中的命令行
七、自动换行
- 一般情况下,一行长代码为了避免超出列限制(80或100个字符)而被分为多行,我们称之为自动换行(line-wrapping)。
- 从哪里断开——自动换行的基本准则是:更倾向于在更高的语法级别处断开
1)如果在非赋值运算符处断开,那么在该符号前断开(比如+,它将位于下一行)。注意:这一点与Google其它语言的编程风格不同(如C++和JavaScript)。这条规则也适用于以下“类运算符”符号:点分隔符(.),类型界限中的&(<T extends Foo & Bar>),catch块中的管道符号(catch (FooException | BarException e)
2)如果在赋值运算符处断开,通常的做法是在该符号后断开(比如=,它与前面的内容留在同一行)。这条规则也适用于foreach语句中的分号。
3)方法名或构造函数名与左括号留在同一行。
4)逗号(,)与其前面的内容留在同一行。
3.自动换行时缩进至少+4个空格
八、空白
1. 垂直空白——一个空行
1)类内连续的成员之间:字段,构造函数,方法,嵌套类,静态初始化块,实例初始化块。例外:两个连续字段之间的空行是可选的,用于字段的空行主要用来对字段进行逻辑分组。
2)在函数体内,语句的逻辑分组间使用空行。
3)类内的第一个成员前或最后一个成员后的空行是可选的(既不鼓励也不反对这样做,视个人喜好而定)。
4)要满足本文档中其他节的空行要求(比如import语句)
2.水平空白——除了语言需求和其它规则,并且除了文字,注释和Javadoc用到单个空格,单个ASCII空格也出现在以下几个地方:
1)分隔任何保留字与紧随其后的左括号(()(如if, for catch等)。
2)分隔任何保留字与其前面的右大括号(})(如else, catch)。
3)在任何左大括号前({),两个例外:
a)@SomeAnnotation({a, b})(不使用空格)。
b)String[][] x = foo;(大括号间没有空格,见下面的Note)。
4)在任何二元或三元运算符的两侧。这也适用于以下“类运算符”符号:
a)类型界限中的&(<T extends Foo & Bar>)。
b)catch块中的管道符号(catch (FooException | BarException e)。
c)foreach语句中的分号。
5)在, : ;及右括号())后
6)如果在一条语句后做注释,则双斜杠(//)两边都要空格。这里可以允许多个空格,但没有必要。
7)类型和变量之间:List list。
8)数组初始化中,大括号内的空格是可选的,即new int[] {5, 6}和new int[] { 5, 6 }都是可以的。
3.水平对齐:不做要求
未对齐的代码:主要是看x
private int x; // this is fine
private Color color; // this too
对齐的代码:主要是看x
private int x; // permitted, but future edits
private Color color; // may leave it unaligned
九、在运算等涉及到优先级的地方,要用()的地方一定要用,这样便于理解。
未完待续,见下一篇文章。。。。。。
【后面的话】
要好好爱惜身体,今天有点不舒服。
——TT