程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JAVA書寫規范,java書寫

JAVA書寫規范,java書寫

編輯:JAVA綜合教程

JAVA書寫規范,java書寫


java程序書寫規范

命名規范
    1、一般概念
        1、盡量使用完整的英文描述符
        2、采用適用於相關領域的術語
        3、采用大小寫混合使名字可讀
        4、盡量少用縮寫,但如果用了,必須符合整個工程中的統一定義
        5、避免使用長的名字(小於 15 個字母為正常選擇)
        6、避免使用類似的名字,或者僅僅是大小寫不同的名字
        7、避免使用下劃線(除靜態常量等)
     2、標識符類型說明
        1、包( Package )的命名
            Package 的名字應該采用完整的英文描述符,都是由一個小寫單詞組成。並且包名的前綴總是一個頂級域名,
            通常是 com、edu、gov、mil、net、org 等;
            如: com.yjhmily.test
        2、類( Class )的命名
            類名應該是個一名詞,采用大小寫混合的方式,每個單詞的首字母大寫。盡量保證類名簡潔而富於描述。
            使用完整單詞,避免縮寫詞 ( 除非工程內有統一縮寫規范或該縮寫詞被更廣泛使用,像 URL , HTML)
        如: FileDescription
        3、接口( Interface )的命名
            基本與 Class 的命名規范類似。在滿足 Classd 命名規則的基礎之上,保證開頭第一個字母為 ”I”,
            便於與普通的 Class區別開。其實現類名稱取接口名的第二個字母到最後,且滿足類名的命名規范;
        如: IMenuEngine

        4、枚舉( Enum )的命名
            基本與 Class 的命名規范類似。在滿足 Classd 命名規則的基礎之上,保證開頭第一個字母為 ”E” ,
            便於與普通的 Class區別開。
        如: EUserRole

        5、異常( Exception )的命名
            異常( Exception ) 通常采用字母 e 表示異常,對於自定義的異常類,其後綴必須為 Exception
        如: BusinessException

        6、方法( Method )的命名
            方法名是一個動詞,采用大小寫混合的方式,第一個單詞的首字母小寫,其後單詞的首字母大寫。
            方法名盡可能的描述出該方法的動作行為。返回類型為 Boolean 值的方法一般由“ is ”或“ has ”來開頭
        如: getCurrentUser() 、 addUser() 、 hasAuthority()

        7、參數( Param )的命名
            第一個單詞的首字母小寫,其後單詞的首字母大寫。參數量名不允許以下劃線或美元符號開頭,
            雖然這在語法上是允許的。參數名應簡短且富於描述。
        如: public UserContext getLoginUser(String loginName);
       
        8、常量字段 ( Constants )的命名
            靜態常量字段( static final ) 全部采用大寫字母,單詞之間用下劃線分隔;
        如: public static final Long FEEDBACK;
        public static Long USER_STATUS;

 

 

 

 

1. 風格務必保持一貫性(Consistent)

一位同胞頂著我的鼻子問,為什麼我們的Java代碼縮進格式非得是這樣,而不能是他那樣,他就是喜歡他自己的這一種,因此他寫的代碼總是用他自己習慣的風格。結果在Code Review裡被大家斃掉,責令修改。因此他是大大地不服。就是風格一貫性問題。其實他的風格,本來也沒有什麼問題,但在項目裡,和其他程序員的程序的風格,顯得扃異,那就存在問題了。比如這個縮進,又比如變量命名方法,不同的類,不同的Methods裡,各自不同,這程序就很難看了。所以一旦你選擇了某種風格,一定要貫徹始終。如果一個項目裡規定了一個風格,即便很不符合你自己的習慣,也要貫徹始終,絕不應該有標新立異。

2. 縮進風格(indent)

既然是從縮進說起,就先說說縮進風格;一般來說,象Java這樣的類C語言,都采用縮進風格。而常用的,有四種

A.K&R風格

這是C程序最早的縮進風格,由C的發明者Ritchie和他的合作者Kernighan率先使用:

if (<cond>) {

<body>

}

其特點,是大括號和if判斷在同一行。通常,縮進為8個空格或一個tab鍵,但在C++和Java裡,也常縮進4個空格。有人喜歡用兩個空格,竊以為不好,不明顯。

B. BSD 風格

又稱Allman Style,源自Unix BSD程序員Eric Allman--他為BSD寫過很多程序:

if (<cond>)

{

<body>

}

特點:大括號和條件判斷分在兩行。

C. Whitesmith風格

這種風格源於Whitesmith C:

if (<cond>)

{

<body>

}

D. GNU風格

這種風格僅見於GNU EMACS的源程序中:

if (<cond>)

{

<body>

}

那麼在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變量

 

 

另:本文僅限IT愛好者交流

 該文引自百度文庫,如有雷同,純屬巧合,本文最終解釋權歸此博主所有。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved