2.5.5 局部变量
1、 本地变量的访问范围应该尽量维持在最小
2、 本地变量应该尽量在他们首次被应用的地方声明。 3、 所有的本地变量申明时都应该初始化。 4、 循环变量应该在for语句中声明。
2.5.6 其他
1、 当面对不可知的调用者时,方法需要对输入参数进行校验。
2、 隐藏工具类的构造器,确保只有static方法和变量的类不能被构造
3、 变量定义尽量基于接口而不是具体实现类,如Map map = new HashMap() 4、 代码中不能使用System.out.println(),e.printStackTrace(),必须使用logger打印信息。
3 命名
3.1 包名
1、 除了Android的原始文件以外,新增加的文件的package都应该使用以下格:package
com.test.nebula.
2、 所有的package名字都应该用小写,如:package com.test.nebula.push;
3、 在Framework中新增加的api,如果只是内部使用,名字中使用如下格式:package
com.test.leos.internal.
3.2 类名(接口)
1、 类名尽量使用能够明确表达类的用途的单词组合,类名中的每个单词的首字母大
写。
2、 Interface名可以是一个名词或形容词(加上'able','ible', or 'er'后缀),如Runnable,
Accessible。
3.3 成员变量
3、 非public, 非static的成员变量用m开头 4、 非public, static的成员变量用s开头
5、 public, static, final (常量)的成员变量全部大写,并且用单词之间用下划线隔开。其
它的成员变量都用小写单词开头。
3.4 成员函数
1、 成员函数用小写单词开头,如果函数名是单词组合,除第一个单词外,其他单词首
字母都用大写。
2、 局部变量及输入参数不要与类成员变量同名(get/set方法与构造函数除外)。
4 异常
4.1 异常处理: 永远不要忽略异常
编程人员有时候会倾向于用如下这段代码会完全把异常忽略 void setServerPort(String value) { try {
serverPort = Integer.parseInt(value); } catch (NumberFormatException e) { } }
永远不要这样做,你可以选择以下几种替代方案
4.2 将Exception丢给该函数的调用者去处理
如
void setServerPort(String value) throws NumberFormatException { serverPort = Integer.parseInt(value); }
4.3 Throw一个新的与该函数合适的Exception
void setServerPort(String value) throws ConfigurationException { try {
serverPort = Integer.parseInt(value); } catch (NumberFormatException e) {
throw new ConfigurationException(\ } }
4.4 仔细处理该Exception
例如可以设置一个默认值
/** Set port. If value is not a valid number, die. */
void setServerPort(String value) { try {
serverPort = Integer.parseInt(value); } catch (NumberFormatException e) { serverPort = 8080; } }
4.5 抛出RuntimeException
采用这种处理方式需要慎重,只有在你认为如果异常出现,系统就应该崩溃时才这样做。 如
/** Set port. If value is not a valid number, die. */ void setServerPort(String value) { try {
serverPort = Integer.parseInt(value); } catch (NumberFormatException e) {
throw new RuntimeException(\ } }
4.6 注释中解释忽略该异常的合理原因
/** If value is not a valid number, original port number is used. */ void setServerPort(String value) { try {
serverPort = Integer.parseInt(value); } catch (NumberFormatException e) {
// Method is documented to just ignore invalid user input. // serverPort will just be unchanged. } }
4.7 异常处理:不要捕获通用异常(Exception)
有时候因为懒惰,我们倾向于这样处理异常
try { someComplicatedIOFunction(); // may throw IOException
someComplicatedParsingFunction(); // may throw ParsingException someComplicatedSecurityFunction(); // may throw SecurityException // phew, made it all the way
} catch (Exception e) { // I'll just catch all exceptions
handleError(); // with one generic handler!
}
在所有的情况下都不要这样做,你可以选择以下几种替代方案。 1. 在同一个try中捕获所有异常 如
try { someComplicatedIOFunction(); // may throw IOException someComplicatedParsingFunction(); // may throw ParsingException SomeComplicatedSecurityFunction(); // may throw SecurityException // phew, made it all the way
} catch (IOException e) { handleIOError();
} catch (ParsingException e) { handleParseError();
} catch (SecurityException e) { handleSecurityError(); }
2. 调整代码,将代码分成不同的块,一个try处理一个异常. 3. 将异常抛出给调用者。
5 注释
5.1 注释规范
1、 由/*...*/界定。专用于注释已失效的代码。
/*
* Comment out the code * String s = \* System.out.println(s); */
2、 由//界定,专用于注释代码细节,即使有多行注释也仍然使用//,以便与用/**/注释
的失效代码分开。除了私有变量外,不推荐使用行末注释。
class MyClass {
private int myField; // An end-line comment.
public void myMethod {
//a very very long //comment.
if (condition1) { //condition1 comment ... } else {
//elses condition comment
3、 按照Javadoc的注释规范来注释。注释统一用英文,至少包含one sentence。
4、 注释中的第一个句子要以(英文)句号、问号或者感叹号结束。Javadoc生成工具
会将注释中的第一个句子放在方法汇总表和索引中。
5、 为了在JavaDoc和IDE中能快速链接跳转到相关联的类与方法,尽量多的使用@see
xxx.MyClass,@see xx.MyClass#find(String)。 6、 如果注释中有超过一个段落,用
分隔。 7、 示例代码以
包裹。8、 标识(java keyword, class/method/field/argument名,Constants))以包
裹。标识在第一次出现时以(@linkxxx.Myclass)注解以便JavaDoc与IDE中可以链接。
5.2 注释内容
1、 在每个java文件开头,加注释,内容包括author,对本文件功能等的描述。 2、 所有public的类和方法都需要加注释。
3、 类和方法名注释的第一句应该说明类或方法的用途,尽量用谓词短语。 4、 必须在注释中明确说明方法各参数的意义、用途和取值范围。 5、 必须在注释中明确说明方法的返回值的意义和返回值的范围。
6、 注释中的每一个单词都要有其不可缺少的意义,不要出现\name - 名字\
这样的没有实际意义的话。如果该注释是废话,连同标签删掉它,而不是自动生成一堆空的标签,如空的@param name,空的@return。 7、 对于调用复杂的API尽量提供代码示例。 8、 对于已知的Bug需要声明。 9、 Null约定:
a) 如果方法允许Null作为参数,或允许返回值为Null,必须在JavaDoc中说明。 b) 如果没有说明,方法的调用者不允许使用Null作为参数,并认为返回值是Null
Safe的。 /**
* @ return the object to found or null if not found. */
10、 存在错误隐患的代码用 //FIXME: 声明。 11、 代码质量不好但能正常运行,或者还没有实现的代码用 //TODO: 或 //XXX:
声明。 12、 对于关键函数或算法等,加注释说明。