首页 > 其他 > 详细

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

时间:2014-02-11 19:42:47      阅读:396      评论:0      收藏:0      [点我收藏+]

【前面的话】

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

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

【问题背景】

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

学习资料】

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

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

【知识汇总】

十、几个具体结构:

   1. 枚举类

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

   2. 变量声明

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

   3. 数组

  • 数组初始化:可写成块状结构——下面的都可以。
bubuko.com,布布扣
new int[] {
  0, 1, 2, 3 
} 

new int[] {
  0,
  1,
  2,
  3
}

new int[] {
  0, 1,
  2, 3
}

new int[]
    {0, 1, 2, 3}
bubuko.com,布布扣
  • 非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)中出现。  

  • 示例:
bubuko.com,布布扣
switch (input) {
  case 1:
  case 2:
    prepareOneOrTwo();
    // fall through
  case 3:
    handleOneTwoOrThree();
    break;
  default:
    handleLargeNumber(input);

}
bubuko.com,布布扣
  • 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字段都是常量。在决定一个字段是否是一个常量时,考虑它是否真的感觉像是一个常量。例如,如果任何一个该实例的观测状态是可变的,则它几乎肯定不会是一个常量。只是永远不打算改变对象一般是不够的,它要真的一直不变才能将它示为常量。
bubuko.com,布布扣
// 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"};
bubuko.com,布布扣
  • 非常量字段名——非常量字段名以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. 除了第一个单词,每个单词的第一个字母都大写,来得到小驼峰式命名。
  • 最后将所有的单词连接起来得到一个标识符。

举例:

bubuko.com,布布扣
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
bubuko.com,布布扣

 

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

 

【后面的话】

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

——TT

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

原文:http://www.cnblogs.com/xt0810/p/3544078.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!