JAVA書寫規範

來源:互聯網
上載者:User

標籤:nts   欄位   劃線   doc   author   start   不用   col   項目   

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變數

JAVA書寫規範

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.