JAVA的编程风格

很久以来都在体会着JAVA的风格,现在做一简单陈述,希望大家多提宝贵意见。

对于一种好的编程语言,学习它的编程风格是很重要的。每种语言都有自己的编写和注释约定,当然所有语言都建立在最基本的约定之上。编程中最重要的并不是让代码按自己希望的方式运行,而是程序中那种自明的编程风格(这对于程序员的益处相信众多程序员都身有体会)!但这还不够,程序还应该具有可读、相对持久和可维护性。可读性非常重要,因为你不希望自己以前的作品在之后的阅读中给自己留下障碍,当然,更重要的是自己的程序能让其他程序员读懂并且修改。

下面我把工作中所理解的java风格做一简单总结,这是我所理解的好的编程风格和应用中我们应当如何使用java编写自己的代码的小Guide。这并不完全,希望大家帮我陆续总结各自的经验。

**** **一般性概述

** 好的编程风格固然重要,但是你一定听说过一些程序员的个人风格。其实我们完全不必为那些所谓条条框框所累,但是作为原则是我们至少不能打破这些常规。我们应该在保持自己风格的同时尽量的把自己与编程潜原则靠拢。

可读性很容易达到,比如,让自己的代码缩排排列、名字采用描述性但不要过长(短名应仅仅用在非远程)、特殊名称比如pi应当被定义为final类型。模块性是编程需要注意的另一重点,把代码划分到类里,在类中把功能划分到方法中,别让一个类太大,否则在使用、修改和理解上都会造成不必要的麻烦,方法也一样,如果一个方法长度超过50行,它产生错误的概率将接近100%,尽量把大方法划分为小方法,编程中为避免重复编写,还应尽量调用JAVA标准类库。

尽量避免在写代码和注释时使用不同语言,经常见到论坛有朋友询问诸如在java中调用c、调用php、调用shell之类的问题,其实在编程中,我们应尽量使用一种语言去完成事情。另外就是不必最优化自己的代码,应该选择相对较优的算法就可以了。

**类、方法和fields

** 类应体现出某种物质的基本概念,比如要编程实现“汽车”的组成,那么所有的汽车都可以用类Car实现。这个类应当包括域描述、属性描述和car的状态(color, number of doors, age等)和由car可完成的操作(getColor, setColor等)。为了提高类的可重用性,不要在类中有过多的描述,当然这也会增加错误产生的机会。

类名首字母大写,比如Date, String, Hashtable等 ... ...

类如下定义:(未使用Javadoc做注释):

** 代码: **

public class Car {

/* Instance variables are placed either in the beginning
or at the end of the class */

private int age;
private Color color;

/* The constructor should be placed in the beginning */

public Car(int age, Color color) {
this.age = age;
this.color = color;
}

/* Example method */
public int getAge() {
return age;
}

/* The main method is optional, but looks like this.
If it exists, it is either the first or the last
method in the class */

public static void main(String [] args) {
...

}
}

注意类名和大括号间的空格!

方法

方法一般定义为public。当然,如果方法仅仅在当前类用到可以定义为private,而如果希望一个子类沿用这个方法则不同,这时候的方法应定义为protected。

java中的方法定义很有趣,它们一般小写字母开头,如果有两个字组成,第二个字的首字母则大写。因此名字的描述性是至关重要的。这使你不用阅读整篇代码来判断这是一个什么方法。在给自己的方法取名时应尽量不要太短或者太长,另一个需要注意的是大多方法使用动词(动宾短语)。

例如:
public void eat() {}
public void eatBananas() {}

Selector(选择器)方法有get前缀,后缀是它们将要get的,比如
public int getBananas() {}

Mutator(存取器)方法则有set前缀,后缀则是他们要set的,比如
public void setBananas(int amount) {}
注意mutators大多无返回值。

方法的参数应当以如下方式给出:
public void aMethod(type parameter1, type parameter2, ... , type parametern) {}

如果参数过长,也可以断开为几行,应对齐向下排列如:
public void aMethod(type parameter1, type parameter2,... ,
type parametern, type parameter n+1,... ,
type parameterm, type parameter m+1) {}

另外要注意类的左束括号应在方法的右束括号之后而非下一行:

** 代码: **

public int aMethod() {
int i = 0;
if(i == 0)
System.out.println("success!");
}

为了文件可读性好,还要注意语句最好写在同一行,当然一行写不下是可以断行的,比如行字母超过80。

**fields

** 比如变量,如果不希望它永久有效,应设为private。如果一个变量在类中不发生任何动作(比如数据结构中的node)则可以设置为public,常量一般声明为public。如果不能确定一个变量到底该声明为什么,应暂且声明为private。

field的名字一般使用小写字母,不要使用下横线或其他特殊字符。 如果变量包含两个字,那么第二个字的首字母大写。比如:

int i, j, k;
Date date;
double myField;

常量一般全部大写,也可以包含下横线:

public static final int MAX_SIZE_OF_DATABASE

fields的名字通常为名词。较重要的fields更应具备描述性,比如程序中包含一个游戏的得分,那可以用score来代表。如果变量变化较频繁,那使用一个单一字符来代表就ok了:

i, j, k 通常代表整数
r, t, u, v, w 通常代表实数
x, y, z 通常是并列出现或代表浮点数
s, s1, s2, 通常代表字符串
c, ch 通常代表字符
f, file 通常代表文件
tmp, temp 通常代表临时变量
ctr, cnt, cntr 一般代表计数器(如果i, j, k这些变量已被使用)
dummy, foo, bar 一般代表哑元变量
args 是main-method的主参数名

**缩排与换行
**
每行长度不得超过80字符。如果需要可以折行时,也应当与上一行有共同的缩排距离。代码应如何交错、如何建立新行、在哪里建立允许、哪里不允许都有一些一般约定,缩排空格一般为2个或4个空格。

**条件表达式

** 如果见到如下语法表达式:

** 代码: **

if (expr)
statement1;
else
statement2;

代码行向右错排两个空格如上所示。

如果在一个表达式中有超过一条的声明,则需要大括号:

** 代码: **

if (expr){
statement1;
statement2;
} else{
statement3;
statement4;
}

** [1] [2] [3] 下一页 **

Published At
Categories with 认证考试
comments powered by Disqus