zoukankan      html  css  js  c++  java
  • Java学习笔记(五)——google java编程风格指南(中)

    【前面的话】

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

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

    【问题背景】

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

    学习资料】

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

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

    【知识汇总】

    十、几个具体结构:

       1. 枚举类

    • 枚举常量间用逗号隔开,换行可选。
    • 没有方法和文档的枚举类可写成数组初始化的格式:
    private enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS }
    • 由于枚举类也是一个类,因此所有适用于其它类的格式规则也适用于枚举类

       2. 变量声明

    • 每次只声明一个变量
    • 需要时才声明,并尽快进行初始化

       3. 数组

    • 数组初始化:可写成块状结构——下面的都可以。
    new int[] {
      0, 1, 2, 3 
    } 
    
    new int[] {
      0,
      1,
      2,
      3
    }
    
    new int[] {
      0, 1,
      2, 3
    }
    
    new int[]
        {0, 1, 2, 3}
    • 非C风格的数组声明——中括号是类型的一部分:String[] args, 而非String args[]

       4. switch语句——switch块的大括号内是一个或多个语句组。每个语句组包含一个或多个switch标签(case FOO:default:),后面跟着一条或多条语句。

    • 缩进:

          与其它块状结构一致,switch块中的内容缩进为2个空格。每个switch标签后新起一行,再缩进2个空格,写下一条或多条语句。

    • Fall-through:注释

          在一个switch块内,每个语句组要么通过break, continue, return或抛出异常来终止,要么通过一条注释来说明程序将继续执行到下一个语句组,任何能表达这个意思的注释都是OK的(典型的是用// fall through)。这个特殊的注释并不需要在最后一个语句组(一般是default)中出现。  

    • 示例:
    switch (input) {
      case 1:
      case 2:
        prepareOneOrTwo();
        // fall through
      case 3:
        handleOneTwoOrThree();
        break;
      default:
        handleLargeNumber(input);
    }
    • default的情况要写出来——每个switch语句都包含一个default语句组,即使它什么代码也不包含。

       5. 注解(Annotations)

    • 注解紧跟在文档块后面,应用于类、方法和构造函数,一个注解独占一行
    @Override
    @Nullable
    public String getNameIfPresent() { ... }
    • 例外:单个的注解可以和签名的第一行出现在同一行。例如:      
     @Override public int hashCode() { ... }
    • 应用于字段的注解紧随文档块出现,应用于字段的多个注解允许与字段出现在同一行。例如:        
    @Partial @Mock DataLoader loader;

          参数和局部变量注解没有特定规则。

       6. 注释

    •  块注释风格
         块注释与其周围的代码在同一缩进级别。它们可以是/* ... */风格,也可以是// ...风格。对于多行的/* ... */注释,后续行必须从*开始,并且与前一行的*对齐。以下示例注释都是OK的。
    /*
     * This is          // And so           /* Or you can
     * okay.            // is this.          * even do this. */
     */

       7. Modifiers

          类和成员的modifiers如果存在,则按Java语言规范中推荐的顺序出现。

    public protected private abstract static final transient volatile synchronized native strictfp

    十一、命名规则

       1. 对所有标识符都通用的规则

    • 标识符只能使用ASCII字母和数字,因此每个有效的标识符名称都能匹配正则表达式w+。
    • 在Google其它编程语言风格中使用的特殊前缀或后缀,如name_, mName, s_name和kName,在Java编程风格中都不再使用。

       2. 标识符类型的规则

    • 包名——包名全部小写,连续的单词只是简单地连接起来,不使用下划线
    • 类名
    1. 类名都以UpperCamelCase(第一个词的首字母,以及后面每个词的首字母都大写,叫做“大骆驼拼写法”)风格编写。
    2. 类名通常是名词或名词短语,接口名称有时可能是形容词或形容词短语。现在还没有特定的规则或行之有效的约定来命名注解类型。
    3. 测试类的命名以它要测试的类的名称开始,以Test结束。例如,HashTest或HashIntegrationTest。
    • 方法名
    1. 方法名都以lowerCamelCase(第一个词的首字母小写,后面每个词的首字母大写,叫做“小骆驼拼写法”)风格编写。
    2. 方法名通常是动词或动词短语。
    3. 下划线可能出现在JUnit测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是:test<MethodUnderTest>_<state>,例如testPop_emptyStack。并不存在唯一正确的方式来命名测试方法。
    • 常量名
    1. 常量名命名模式为CONSTANT_CASE,全部字母大写,用下划线分隔单词。那,到底什么算是一个常量?
    2. 每个常量都是一个静态final字段,但不是所有静态final字段都是常量。在决定一个字段是否是一个常量时,考虑它是否真的感觉像是一个常量。例如,如果任何一个该实例的观测状态是可变的,则它几乎肯定不会是一个常量。只是永远不打算改变对象一般是不够的,它要真的一直不变才能将它示为常量。
    // Constants
    static final int NUMBER = 5;
    static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann");
    static final Joiner COMMA_JOINER = Joiner.on(',');  // because Joiner is immutable
    static final SomeMutableType[] EMPTY_ARRAY = {};
    enum SomeEnum { ENUM_CONSTANT } 
    
    // Not constants
    static String nonFinal = "non-final";
    final String nonStatic = "non-static";
    static final Set<String> mutableCollection = new HashSet<String>();
    static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable);
    static final Logger logger = Logger.getLogger(MyClass.getName());
    static final String[] nonEmptyArray = {"these", "can", "change"};
    • 非常量字段名——非常量字段名以lowerCamelCase风格编写。
    • 参数名——参数名以lowerCamelCase风格编写。参数应该避免用单个字符命名。
    • 局部变量名
    1. 局部变量名以lowerCamelCase风格编写,比起其它类型的名称,局部变量名可以有更为宽松的缩写。
    2. 虽然缩写更宽松,但还是要避免用单字符进行命名,除了临时变量和循环变量。
    3. 即使局部变量是final和不可改变的,也不应该把它示为常量,自然也不能用常量的规则去命名它。
    • 类型变量名
    1. 单个的大写字母,后面可以跟一个数字(如:E, T, X, T2)。
    2. 以类命名方式,后面加个大写的T(如:RequestT, FooBarT)。

       3. 驼峰式命名法——驼峰式命名法分大驼峰式命名法(UpperCamelCase)和小驼峰式命名法(lowerCamelCase)。有时,我们有不只一种合理的方式将一个英语词组转换成驼峰形式,如缩略语或不寻常的结构(例如"IPv6"或"iOS")。Google指定了以下的转换方案。

    • 把短语转换为纯ASCII码,并且移除任何单引号。例如:"Müller’s algorithm"将变成"Muellers algorithm"。
    • 把这个结果切分成单词,在空格或其它标点符号(通常是连字符)处分割开。
    • 现在将所有字母都小写(包括缩写),然后将单词的第一个字母大写:
    1. 每个单词的第一个字母都大写,来得到大驼峰式命名。‘
    2. 除了第一个单词,每个单词的第一个字母都大写,来得到小驼峰式命名。
    • 最后将所有的单词连接起来得到一个标识符。

    举例:

    Prose form                Correct               Incorrect
    ------------------------------------------------------------------
    "XML HTTP request"        XmlHttpRequest        XMLHTTPRequest
    "new customer ID"         newCustomerId         newCustomerID
    "inner stopwatch"         innerStopwatch        innerStopWatch
    "supports IPv6 on iOS?"   supportsIpv6OnIos     supportsIPv6OnIOS
    "YouTube importer"        YouTubeImporter

     

    未完待续,见下一篇文章。。。。。。

    【后面的话】

    做舅舅了,哈哈哈哈。。。。。。。。。。。

    ——TT

  • 相关阅读:
    NexusFile(文件管理器)
    塔式、机架式、刀片式服务器的区别和特点
    使用dsoframer控件出现"Unable to display the inactive document. Click here to reactivate the document."的问题 .
    类型“Microsoft.Office.Interop.Word.ApplicationClass”错误 4317 无法嵌入互操作类型
    解决C#导出excel异常来自 HRESULT:0x800A03EC的方法 .
    c# winfrom 皮肤切换 控件 IrisSkin2.dll 使用
    巧用花生壳将局域网内的FTP和www服务器发布到互联网
    Windows Server 2003 动态网站IIS设置(图)
    NAT原理简介、各种 ADSL Modem 及路由器的端口映射方法
    UML用例图
  • 原文地址:https://www.cnblogs.com/xt0810/p/3544078.html
Copyright © 2011-2022 走看看