四、函数编写风格. 函数的命名通常,函数的命名也是以能表达函数的动作意义为原则的,一般是由动词打头,然后跟上表示动作对象的名词,各单词的首字母应该大写。另外,还有一些函数命名的通用规则。如取数,则用Get打头,然后跟上要取的对象的名字;设置数,则用Set打头,然后跟上要设的对象的名字;而对象中为了响应消息进行动作的函数,可以命名为On打头,然后是相应的消息的名称;进行主动动作的函数,可以命名为Do打头,然后是相应的动作名称。类似的规则还有很多,需要程序员多读优秀的程序,逐渐积累经验,才能作出好的函数命名。. 函数注释系统自动生成的函数,如鼠标动作响应函数等,不必太多的注释和解释;对于自行编写的函数,若是系统关键函数,则必须在函数实现部分的上方标明该函数的信息,格式如下:/**
* 函数名:
* 编写者:
* 参考资料:
* 功  能:
* 输入参数:
* 输出参数:
* 备  注:
*/希望尽量遵循以上格式。
五、符号风格. 总体要求对于各种符号的定义,都有一个共通点,就是应该使用有实际意义的英文单词或英文单词的缩写,不要使用简单但没有意义的字串,尽可能不使用阿拉伯数字,更切忌使用中文拼音的首字母。如这样的名称是不提倡的:Value1,Value2,Value3,Value4 …。例如:
file(文件),code(编号),data(数据),pagepoint(页面指针), faxcode(传真号) ,address(地址),bank(开户银行),……. 变量名称变量命名由(前缀+修饰语)构成。现在比较流行的是一套由微软的一个匈牙利软件工程师首先使用,并且在微软推广开来,现在被称之为匈牙利命名法的命名规则。匈牙利命名法规定,使用表示标识符所对应的变量类型的英文小写缩写作为标识符的前缀,后面在使用表示变量意义的英文单词或缩写进行命名。下面是匈牙利命名法中的一些命名方式:(1)生存期修饰:用l(local)表示局域变量,p(public)表示全局变量,s(send)表示参数变量(2)类型修饰:用s(AnsiString)表示字符串,c(char)表示字符,n(number)数值,i(intger)表示整数,d(double)表示双精度,f(float)浮点型,b(bool)布尔型,d(date)表示日期型.例如:
li_length表示整形的局域变量,是用来标识长度的.ls_code表示字符型的局域变量,用来标识代码.. 控件名称控件命名由(前缀+修饰语)构成。前缀即为控件的名称。按钮变量  Button+Xxxxxxx    例如:ButtonSave,ButtonExit,ButtonPrint等
题标变量  Label+Xxxxxxxx    例如:LabelName,LabelSex等
数据表变量 Table+Xxxxxx      例如:TableFile,TableCount等
查询变量  Query+Xxxxxx      例如:QueryFile,QueryCeneter等
数据源变量 DataSource+Xxx      例如:DataSourceFile,DataSourceCenter等

(注:对于与表有关的控件“修饰语”部分最好直接用表名。). Package 的命名 Package 的名字应该都是由一个小写单词组成。 . Class 的命名 Class 的名字必须由一个或数个能表达该类的意思的大写字母开头而其它字母都小写的单词或缩写组成,这样能使这个 Class 的名称能更容易被理解。. Class 变量的命名 变量的名字必须用一个小写字母开头。后面的单词用大写字母开头。对于类的成员变量,在对其标识符命名时,要加上代表member(成员)的前缀m_。例如一个标识符为m_dwFlag,则它表示的变量是一个类型为双字的成员变量,它是代表一个标志。. Static Final 变量的命名 Static Final 变量的名字应该都大写,并且指出完整含义。 . 参数的命名 参数的名字必须和变量的命名规范一致。 . 数组的命名 数组应该总是用下面的方式来命名:
byte[] buffer;
 
而不是: 
byte buffer[]; . 方法的参数
 
使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字: SetCounter(int size)
{
this.size = size;
} . 神秘的数首先要说什么是神秘的数。我们在程序里经常会用到一些量,它是有特定的含义的。例如,现在我们写一个薪金统计程序,公司员工有50人,我们在程序里就会用50这个数去进行各种各样的运算。在这里,50就是"神秘的数"。为什么称它为神秘呢?因为别的程序员在程序里看到50这个数,不知道它的含义,只能靠猜了。在程序里出现"神秘的数"会降低程序的可读性,应该尽量避免。避免的方法是把神秘的数定义为一个常量。注意这个常量的命名应该能表达该数的意义,并且应该全部大写,以与对应于变量的标识符区别开来。例如上面50这个数,我们可以定义为一个名为NUMOFEMPLOYEES的常量来代替。这样,别的程序员在读程序的时候就可以容易理解了。六、程序编写风格. exit() exit 除了在 main 中可以被调用外,其他的地方不应该调用。因为这样做不给任何代码代码机会来截获退出。一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退出。 . 异常 申明的错误应该抛出一个RuntimeException或者派生的异常。 
顶层的main()函数应该截获所有的异常,并且打印(或者记录在日志中)在屏幕上。 . 垃圾收集 JAVA使用成熟的后台垃圾收集技术来代替引用计数。但是这样会导致一个问题:你必须在使用完对象的实例以后进行清场工作。比如一个prel的程序员可能这么写:  ...
{
FileOutputStream fos = new FileOutputStream(projectFile);
project.save(fos, "IDE Project File"); 
}
...
 
除非输出流一出作用域就关闭,非引用计数的程序语言,比如JAVA,是不能自动完成变量的清场工作的。必须象下面一样写:  FileOutputStream fos = new FileOutputStream(projectFile);
project.save(fos, "IDE Project File"); 
fos.close();. Clone 下面是一种有用的方法: 
implements Cloneablepublic
Object clone()
{
try 
{
ThisClass obj = (ThisClass)super.clone();
obj.field1 = (int[])field1.clone();
obj.field2 = field2;
return obj;

catch(CloneNotSupportedException e) 
{
throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());
}
} . final 类 绝对不要因为性能的原因将类定义为 final 的(除非程序的框架要求) 
如果一个类还没有准备好被继承,最好在类文档中注明,而不要将她定义为 final 的。这是因为没有人可以保证会不会由于什么原因需要继承她。
 
. 访问类的成员变量
 
大部分的类成员变量应该定义为 protected 的来防止继承类使用他们。 
注意,要用"int[] packets",而不是"int packets[]",后一种永远也不要用。 public void setPackets(int[] packets) 

this.packets = packets; 
}
CounterSet(int size)
{
this.size = size;
}. byte 数组转换到 characters 为了将 byte 数组转换到 characters,你可以这么做: "Hello world!".getBytes(); . Utility 类 Utility 类(仅仅提供方法的类)应该被申明为抽象的来防止被继承或被初始化。 . 初始化
 
下面的代码是一种很好的初始化数组的方法: objectArguments = new Object[] 

arguments 
}; . 枚举类型
 
JAVA 对枚举的支持不好,但是下面的代码是一种很有用的模板: class Colour 
{
   public static final Colour BLACK = new Colour(0, 0, 0);
   public static final Colour RED = new Colour(0xFF, 0, 0);
   public static final Colour GREEN = new Colour(0, 0xFF, 0);
   public static final Colour BLUE = new Colour(0, 0, 0xFF);
   public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);
}
 
这种技术实现了RED, GREEN, BLUE 等可以象其他语言的枚举类型一样使用的常量。 他们可以用 '==' 操作符来比较。 
但是这样使用有一个缺陷:如果一个用户用这样的方法来创建颜色 BLACK new Colour(0,0,0) 那么这就是另外一个对象,'=='操作符就会产生错误。她的 equal() 方法仍然有效。由于这个原因,这个技术的缺陷最好注明在文档中,或者只在自己的包中使用。. 混合使用 AWT 和 Swing 组件 如果要将 AWT 组件和 Swing 组件混合起来使用的话,请小心使用。实际上,尽量不要将他们混合起来使用。 . 滚动的 AWT 组件 AWT 组件绝对不要用 JscrollPane 类来实现滚动。滚动 AWT 组件的时候一定要用 AWT ScrollPane 组件来实现。. 避免在 InternalFrame 组件中使用 AWT 组件
 
尽量不要这么做,要不然会出现不可预料的后果。 . Z-Order 问题 AWT 组件总是显示在 Swing 组件之上。当使用包含 AWT 组件的 POP-UP 菜单的时候要小心,尽量不要这样使用。 
八、性能  在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。  不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。 . 不必要的对象构造 不要在循环中构造和释放对象 . 使用 StringBuffer 对象 在处理 String 的时候要尽量使用 StringBuffer 类,StringBuffer 类是构成 String 类的基础。String 类将 StringBuffer 类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用 StringBuffer 来实现大部分的工作,当工作完成后将 StringBuffer 对象再转换为需要的 String 对象。比如:如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用 StringBuffer 对