课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > java程序书写规范
  • java程序书写规范

    发布:昆明Java培训      来源:达内新闻      时间:2016-09-08

  • 昆明Java培训机构的老师给大家讲一下java程序书写规范

    1. 风格务必保持一贯性(Consistent)

    一位同胞顶着我的鼻子问,为什么我们的Java代码缩进格式非得是这样,而不能是他那样,他就是喜欢他自己的这一种,因此他写的代码总是用他自己习惯的风格。结果在Code Review里被大家毙掉,责令修改。因此他是大大地不服。就是风格一贯性问题。其实他的风格,本来也没有什么问题,但在项目里,和其他程序员的程序的风格,显得扃异,那就存在问题了。比如这个缩进,又比如变量命名方法, 不同的类,不同的Methods里,各自不同,这程序就很难看了。所以一旦你选择了某种风格,一定要贯彻始终。如果一个项目里规定了一个风格,即便很不符合你自己的习惯,也要贯彻始终,绝不应该有标新立异。

    2. 缩进风格(indent)

    既然是从缩进说起,就先说说缩进风格;一般来说,象Java这样的类C语言,都采用缩进风格。而常用的,有四种

    A.K&R风格

    这是C程序最早的缩进风格,由C的发明者Ritchie和他的合作者Kernighan率先使用:

    if () {

    }

    其特点,是大括号和if判断在同一行。通常,缩进为8个空格或一个tab键,但在C++和Java里,也常缩进4个空格。有人喜欢用两个空格,窃以为不好,不明显。

    B. BSD 风格

    又称Allman Style,源自Unix BSD程序员Eric Allman--他为BSD写过很多程序:

    if ()

    {

    }

    特点:大括号和条件判断分在两行。

    C. Whitesmith风格

    这种风格源于Whitesmith C:

    if ()

    {

    }

    D. GNU风格

    这种风格仅见于GNU EMACS的源程序中:

    if ()

    {

    }

    那么在Java里用哪种好呢?建议只采用A或B。SUN有一个Java Code Name Convention,建议的是A。

    3. Tab还是空格(Tabs vs Space)

    还是缩进问题。那么一次缩进应该多大距离?是八个空格键,还是一个Tab键?

    Java有一个特点,就是跨平台性。不过跨平台指的是它的Class可以在不同平台的虚拟机上运行。Java的源程序,有时候可不是跨平台的。什么?源程序还能不跨平台?是的。有次一个程序员送来一些Code,在我的环境里打开,程序难看 一塌糊涂,有该缩进的地方,没有缩进,有的则缩进一大截,如同怪石一样,嶙峋参差。这样的代码质量可不行!叫来程序员一问,答曰在他那里漂亮得很啊,他还专门花时间去美化它们了呢?

    原来他的缩进没有注意一个风格,在有的地方用Tab键,有的地方打空格。在一些不同的平台上,Tab键的宽度可是不一样的。

    说道这里,相信大家比较清楚了,在缩进的时候,尽量不用Tab,而是用空格。好在许多编辑器,都可以把你的键盘上的Tab键定义成几个空格。赶紧去定义它!

    每次用多少空格呢?4个。2个太少不明显,8个太多占空间。

    4. 行宽

    说道8个空格键占空间,那么我一行有320列,8个空格算什么?打住!请寄住,一行尽量不要超过80列。许多终端一个屏幕只能显示80列,为它们想想巴。如果你的语句太长,想办法折断它,分几列来写。

    5. 变量命名

    SUN Java Code Convention里定义了Java里package, class, method和普通变量的命名规则,我就不用再浪费字节了。这里提提一些注意事项和一些SUN没提到但大家常用的方式。

    a. 用有意义的名字命名变量

    首先,用完整的英语单词或约定俗成的简写命名你的变量,如:

    firstName

    zipCode

    如果英语不够好,至少用别人看得懂的拼音命名,如

    zhuZhi (住址)

    胡乱简写,或者胡乱命名,则没有人看得懂你的变量的含义:

    fn

    zc

    zz

    b. 常量用全大写加下画线命名

    Java里的常量,就是static final:

    static final SMTH_BBS="bbs.tsinghua.edu.cn";

    c. 用复数命名collection类变量

    collection包括数组,vector等。命名时请用复数:

    customers

    classMates

    也可以用一些修饰词命名:

    someStudents

    allDepartments

    d. 循环变量

    一般大家都用i, j, k等做循环变量。

    e. Stream变量

    一般习惯用in, out作为Stream变量,对应inputStream, outputStream

    类。如果即读又写的ioStream,可以用inOut。

    f. 变量的命名习惯

    习惯MFC的人喜欢采用匈牙利命名法(Hungarian Notation)。如果你习惯这样,尽管用,但注意要和同Project的人保持一致。还有些人习惯C++里的下画线方式,也可以采用。

    Hungarian Notation:

    sFirstName

    Under Score Style:

    _firstName

    这里提供一个Hungarian Notation的前缀命名习惯:

    int i

    byte b

    char c

    double d

    float f

    long l

    offset off

    length len

    Object o

    String s (or str)

    Arbitray value v

    6. Java文件格式

    有许多方式定义你的文件语句格式,以下是一个例子:

    a. 文件头说明 (可无)

    b. Package定义

    c. 空行

    d. Import语句

    e. 空行

    f. 类定义

    如:

    package com.midi;

    //Java Classes

    import java.awt.*;

    import java.io.*;

    import javax.swing.event.*;

    //WebLogic Classes

    import weblogic.internal.*;

    /**

    * Blah blah

    * @author midi

    * @version 22.2

    */

    public class MyFirst extends JFrame {

    ...

    }

    /**

    * Foo...

    * @author midi

    * @version 38.2

    */

    class Foo {

    ...

    }

    7. import顺序

    杂乱无章的顺序,看起来很不顺眼。应该对你要import的classes归类,按顺序罗列:

    a. Java标准类(java.*)

    b. Java扩充类(javax.*)

    c. 第三方类

    d. 你的应用程序的类

    而且注意在第三方类里注释它们,说明它们的来源:

    import java.*;

    import java.util.Date;

    import java.util.Enumeration;

    import javax.sql.*;

    //Apache Xerces

    import org.apache.xml.*;

    import org.apache.xerces.dom.*;

    //Application classes

    import com.midi.util.*;

    8. Classes的顺序

    a. Javadoc注释或者其它文件头注释

    b. 类声明

    c. Fields声明

    d. 空行

    e. 构造函数

    f. 空行

    g. 方法(不包括main)

    h. 空行

    i. Inner类

    j. 空行

    k. main()

    例:

    /**

    * This is a simple DOM tree XML parser...

    * ...

    * @author: midi

    * @version: 0.0.1

    **/

    public class MyParser {

    // public constants

    public static final String TITLE = "MyParser";

    public static final String VERSION = "0.0.1";

    // Private variables

    private int iSchemaVersion;

    /**

    * Constructor

    */

    public MyParser () {

    iSchemaVersion = 1;

    }

    /**

    * Constructor

    * @param...

    */

    public MyParser (iSchemaVersion) {

    this.iSchemaVersion = iSchemaVersion;

    }

    /**

    * Initialize the parser...

    */

    public void myInit () throws Exception {

    ....

    }

    /**

    * start the application

    */

    public static void main (String[] argvs) {

    ...

    }

    }

    9. Field定义

    请遵从以下顺序:

    a. Public常量

    b. Public变量

    c. Protected常量

    d. Protected变量

    e. Package常量

    f. Package变量

    g. Private常量

    h. Private变量

    了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:JAVA命名书写规范

下一篇:java线程协作wait与notiy

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56