源文件编码格式为
UTF-8
ASCII
水平空格字符(0x20,即空格)是源文件中唯一允许出现的空白字符,这意味着:所有其它字符串中的空白字符都要进行转义。对于具有特殊转义序列的任何字符(\b, \t, \n, \f, \r, \“, \‘),我们使用它的转义序列,而不是相应的八进制(比如 \012 )或
Unicode
(比如 \u000a )转义。-
在使用
Unicode
转义符或是一些实际的Unicode
字符时,建议做些注释给出解释,这有助于别人阅读和理解。
一个源文件应包含(每个部分用一个空行隔开):
1)许可证或版权信息
2)package语句:写在一行上
3)import语句:a.不要出现通配符,如:import java.util.*; b.import语句不要换行 c.每组由一个空行隔开,组内不空行
4)一个顶级类:a.每个类应该以某种逻辑去排序它的成员 b.当一个类有多个构造函数或是多个同名方法,这些函数或方法应该按顺序出现在一起 c.大括号
{ }
:a.
使用大括号,即使它是可选的。b.
对于非空块和块状结构,大括号遵循Kernighan和Ritchie风格,即左大括号前不换行,后换行;右大括号前换行,若是一个语句或函数体的终止,则后换行,否则不换行。c.
空的块状结构可不换行,如void doNothing() {};多块语句的一部分,即使大括号内没内容,也要换行,如if/else,try/catch/finally每当开始一个新的块,缩进增加2个空格,当块结束时,缩进返回先前的缩进级别。缩进级别适用于代码和注释。
一行一个语句。
提取方法或局部变量可以有效解决代码过长的问题。
自动换行的基本准则:倾向于在更高的语法级别出断开:
a.
如果在非赋值运算符
处断开,那么在该符号前断开,如+,它将位于下一行。b.
如果在赋值运算符
处断开,那么在该符号后断开,如=,它将与前面的内容留在同一行。c.
左括号与方法名或函数名留在同一行。d.
逗号与其前面的内容留在一行没有必要使用多个连续的空行。
单个
ASCII
空格出现在如下几个地方:a.
分隔任何保留字与其后的左括号,如if,for,catchb.
分隔任何保留字与其前面的右大括号,如else,catchc.
任何左大括号前d.
任何二元或三元运算符的两侧e.
注释的//两边要有空格f.
类型和变量之间,如List listg.
数据初始化中中括号内的空格可选,如new int[ ] {5,6}-
水平对齐:通过增加可变数量的空格来使某一行的字符与上一行的相应字符对齐。虽然增加了可读性,但是后期维护工作复杂。
变量声明:
a.
每次只声明一个变量,不要使用组合声明,如int x,yb.
在需要的时候才声明,而不是在代码块的开头就把变量一次性都声明了,最好在声明时就进行初始化,或者尽快进行初始化。-
数组初始化可写成块状结构,如
-
在一个switch块内,每个语句组要么通过break,continue,return或抛出异常来终止,要么通过一条注释来说明程序将继续执行到下一个语句组,如//fall through
每个switch语句都包含一个default语句组,即使它什么代码也不包含。
对于多行的
/*……*/
注释,后续必须从*
开始,并且与前一行的*
对齐。类和成员的modifiers如果存在,则按Java语言规范中推荐的顺序出现。public protected private abstract static final transient volatile synchronized native strictfp
20.命名规范: a.
包名全部小写 b.
类名,接口名首字母大写,测试类以Test结尾 c.
方法名,变量名首单词小写,其余单词首字母大写 d.
常量名全部大写,单词之间用_连接
@Override,能用就用
-
使用类名调用静态的类成员,而不是某个具体对象或表达式。
尽量不要使用Finalizers