Java学习笔记(四)——google java编程风格指南(上)

【前面的话】

    年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油。好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自己还是一个人。

    如果你想要学习关于编码风格方面的知识,建议直接阅读参考资料中的文章,比看我这里写的好多了,这是真心话,我只是写自己的笔记。便于自己在以后的编码中注意。

【问题背景】

     在做开发工作的时候,总是被说编码风格不好,现在自己找了Google Java编程风格指南进行学习,希望可以写出清晰的代码。

学习资料】

     1Google Java编程风格指南,作者:Hawstein

     http://hawstein.com/posts/google-java-style.html

【知识汇总】

一、源文件编码格式为:UTF-8

二、一个源文件按照下面顺序出现:

  1. 许可证或版权信息--如果需要
  2. package语句--出现在一行之内,不能换行
  3. 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)类成员的顺序——每个类应该以某种逻辑去排序它的成员,维护者应该要能解释这种排序逻辑,也就是不能习惯性的将新添加的方法总是放在最后面。重载不能够分开,当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按顺序出现在一起,中间不要放进其它函数方法。

以上四个部分之间用一个空行隔开

三、大括号

  1. 大括号与if, else, for, do, while语句一起使用,即使只有一条语句(或是空),也应该把大括号写上。
  2. 对于非空块遵循K & R 风格

       1)左大括号前不换行

       2)左大括号后换行

       3)右大括号前换行

       4)如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。例如,如果右大括号后面是else或逗号,则不换行。

    3. 空块:可以用简洁版本

        一个空的块状结构里什么也不包含,大括号可以简洁地写成{},不需要换行。例外:如果它是一个多块语句的一部分(if/else 或 try/catch/finally) ,即使大括号内没内容,右大括号也要换行。

四、每当开始一个新的块,缩进增加2个空格

五、一行一个语句

六、列限制:80100

例外:

  1. 不可能满足列限制的行(例如,Javadoc中的一个长URL,或是一个长的JSNI方法参考)。
  2. package和import语句
  3. 注释中那些可能被剪切并粘贴到shell中的命令行

七、自动换行

  1. 一般情况下,一行长代码为了避免超出列限制(80或100个字符)而被分为多行,我们称之为自动换行(line-wrapping)。
  2. 从哪里断开——自动换行的基本准则是:更倾向于在更高的语法级别处断开

        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

posted @ 2014-02-11 11:52  赞恩  阅读(987)  评论(0编辑  收藏  举报