[Coding Style]官方Java編碼規范


原文地址

http://www.cesclub.com/bw/jishuzhongxin/xiangmuyanfaguanli/2012/1002/42434.html

 

Oracle官方Java編碼規范(英文版)

http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

 

1 介紹(Introduction)

 

1.1 為什么要有編碼規范(Why Have Code Conventions)

編碼規范對於程序員而言尤為首要,有以下幾個原因:

 

  •  一個軟件的生命周期中,80%的花費在於維護
  •  幾乎沒有任何一個軟件,在其全部生命周期中,均由最初的開辟人員來維護
  •  編碼規范可以改良軟件的可讀性,可以讓程序員盡快而徹底地懂得新的代碼
  •  若是你將源碼作為產品公布,就須要確任它是否被很好的打包並且清楚無誤,一如你已構建的其它任何產品

 

為了履行規范,每個軟件開辟人員必須一致遵守編碼規范。每小我。

 

1.2 版權聲明(Acknowledgments)

本文檔反應的是Sun MicroSystems公司,Java說話規范中的編碼標准項目組。首要供獻者包含:Peter King,Patrick Naughton,Mike DeMoney,Jonni Kanerva,Kathy Walrath以及Scott Hommel。

本文檔現由Scott Hommel維護,有關評論定見請發至shommel@eng.sun.com

 

2 文件名(File Names)

這項目組列出了常用的文件名及厥后綴。

 

2.1 文件后綴(File Suffixes)

Java程序應用下列文件后綴:

文件類別

文件后綴

Java源文件

.java

Java字節碼文件

.class

 

2.2 常用文件名(Common File Names)

常用的文件名包含:

文件名

用處

GNUmakefile

makefiles的首選文件名。我們采取gnumake來創建(build)軟件。

README

概述特定目次下所含內容的文件的首選文件名

 

3 文件組織(File Organization)

一個文件由被空行分別而成的段落以及標識每個段落的可選注釋共同構成。跨越2000行的程序難以瀏覽,應當盡量避免。"Java源文件典范"供給了一個布局公道的Java程序典范。

 

3.1 Java源文件(Java Source Files)

每個Java源文件都包含一個單一的公共類或接口。若私有類和接口與一個公共類相接洽關系,可以將它們和公共類放入同一個源文件。公共類必須是這個文件中的第一個類或接口。

Java源文件還遵守以下規矩:

 

  • 開首注釋(拜見"開首注釋")
  • 包和引入語句(拜見"包和引入語句")
  • 類和接口聲明(拜見"類和接口聲明")

 

 

3.1.1 開首注釋(Beginning Comments)

所有的源文件都應當在開首有一個C說話風格的注釋,此中列出類名、版本信息、日期和版權聲明:

 

/*
 * Classname
 *
 * Version information
 *
 * Date
 *
 * Copyright notice
 */

         

3.1.2 包和引入語句(Package and Import Statements)

在多半Java源文件中,第一個非注釋行是包語句。在它之后可以跟引入語句。例如:

 

package java.awt;
 
import java.awt.peer.CanvasPeer;

         

3.1.3 類和接口聲明(Class and Interface Declarations)

下表描述了類和接口聲明的各個項目組以及它們呈現的先后次序。拜見"Java源文件典范"中一個包含注釋的例子。

 

類/接口聲明的各項目組

注解

1

類/接口文檔注釋(/**……*/)

該注釋中所需包含的信息,拜見"文檔注釋"

2

類或接口的聲明

 

3

類/接話柄現的注釋(/*……*/)若是有須要的話

該注釋應包含任何有關全部類或接口的信息,而這些信息又不合適作為類/接口文檔注釋。

4

類的(靜態)變量

起首是類的公共變量,隨后是維護變量,再后是包一級此外變量(沒有接見潤飾符,access modifier),最后是私有變量。

5

實例變量

起首是公共級,隨后是維護級,再后是包一級(沒有接見潤飾符),最后是私有級。

6

機關器

 

7

辦法

這些辦法應當按功能,而非感化域或接見權限,分組。例如,一個私有的類辦法可以置於兩個公有的實例辦法之間。其目標是為了更便於瀏覽和懂得代碼。

 

4 縮進排版(Indentation)

4個空格常被作為縮進排版的一個單位。縮進的確切申明並未具體指定(空格 vs. 制表符)。一個制表符便是8個空格(而非4個)。

 

4.1 行長度(Line Length)

盡量避免一行的長度跨越80個字符,因為很多終端和對象不克不及很益處理懲罰之。

重視:用於文檔中的例子應當應用更短的行長,長度一般不跨越70個字符。

 

4.2 換行(Wrapping Lines)

當一個表達式無法容納在一行內時,可以根據如下一般規矩斷開之:

 

  •  在一個逗號后面斷開
  •  在一個操縱符前面斷開
  •  寧可選擇較高等別(higher-level)的斷開,而非較初級別(lower-level)的斷開
  •  新的一行應當與上一行同一級別表達式的開首處對齊
  •  若是以上規矩導致你的代碼雜沓或者使你的代碼都堆擠在右邊,那就代之以縮進8個空格。

 

以下是斷創辦法調用的一些例子:

 

someMethod(longExpression1, longExpression2, longExpression3,
        longExpression4, longExpression5);

var = someMethod1(longExpression1,
                someMethod2(longExpression2,
                        longExpression3));

譯者注上方是SUN(Oracle)網站上html版起原根蒂根基始寫法,筆者看了半天是一頭霧水;對比pdf版本看,才發明是SUN的html版本寫的不合錯誤

亦即,新的一行在上一行同一級別表達式的開首對齊:longExpression4與longExpression1對齊;someMethod2與longExpression1對齊,longExpression3與longExpression2對齊:

 

someMethod(longExpression1, longExpression2, longExpression3,
           longExpression4, longExpression5);

var = someMethod1(longExpression1,
                  someMethod2(longExpression2,
                              longExpression3));

          

 

以下是兩個斷開算術表達式的例子。前者更好,因為斷開處位於括號表達式的外邊,這是個較高等此外斷開。

 

longName1 = longName2 * (longName3 + longName4 - longName5)
           + 4 * longname6; //PREFFER

longName1 = longName2 * (longName3 + longName4
                       - longName5) + 4 * longname6; //AVOID

 

 

譯者注上方是SUN(Oracle)網站上html版起原根蒂根基始寫法,筆者看了半天是一頭霧水;對比pdf版本看,才發明是SUN的html版本寫的不合錯誤

亦即,新的一行在上一行同一級別表達式的開首對齊:加號與longName2對齊;減號與longName3對齊(固然分行的處所不合錯誤,但書寫還是要對齊的)。

 

longName1 = longName2 * (longName3 + longName4 - longName5)
            + 4 * longname6; //PREFFER

longName1 = longName2 * (longName3 + longName4
                         - longName5) + 4 * longname6; //AVOID

          

 

 

以下是兩個縮進辦法聲明的例子。前者是常規景象。后者若應用常規的縮進體式格式將會使第二行和第三行移得很靠右,所以代之以縮進8個空格

 

//CONVENTIONALINDENTATION
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
           Object andStillAnother) {
    ...
}

//INDENT 8 SPACESTO AVOID VERY DEEP INDENTS
private static synchronized horkingLongMethodName(int anArg,
        Object anotherArg, String yetAnotherArg,
        Object andStillAnother) {
    ...
}

         

if語句的換行凡是應用8個空格的規矩,因為常規縮進(4個空格)會使語句體看起來斗勁費勁。比如:

 

//DON’T USE THISINDENTATION
if ((condition1&& condition2)
    || (condition3 && condition4)
    ||!(condition5 && condition6)) { //BAD WRAPS
    doSomethingAboutIt();            //MAKE THIS LINE EASY TO MISS
}

//USE THISINDENTATION INSTEAD
if ((condition1&& condition2)
        || (condition3 && condition4)
        ||!(condition5 && condition6)) {
    doSomethingAboutIt();
}

//OR USE THIS
if ((condition1&& condition2) || (condition3 && condition4)
        ||!(condition5 && condition6)) {
    doSomethingAboutIt();
}

         

這里有三種可行的辦法用於處理懲罰三元運算表達式:

 

alpha = aLongBooleanExpression) ? beta : gamma;

alpha = (aLongBooleanExpression) ? beta
                                 : gamma;
 
alpha = (aLongBooleanExpression)
        ? beta
        : gamma;

         

5 注釋(Comments)

 

Java程序有兩類注釋:實現注釋(implementation comments)和文檔注釋(document comments)。實現注釋是那些在C++中見過的,應用/*...*/和//界定的注釋。文檔注釋(被稱為"doc comments")是Java獨有的,並由/**...*/界定。文檔注釋可以經由過程javadoc對象轉換成HTML文件。

實現注釋用以注釋代碼或者實現細節。文檔注釋從實現(implementation-free)的角度描述代碼的規范。它可以被那些手頭沒有源碼的開辟人員讀懂。

注釋應被用來給出代碼的總括,並供給代碼自身沒有供給的附加信息。注釋應當僅包含與瀏覽和懂得程序有關的信息。例如,響應的包如何被建樹或位於哪個目次下之類的信息不該包含在注釋中。

在注釋里,對設計決定計划中首要的或者不是顯而易見的處所進行申明是可以的,但應避免供給代碼中己清楚表達出來的反復信息。多余的的注釋很輕易過期。凡是應避免那些代碼更新就可能過期的注釋。

重視:頻繁的注釋有時反應出代碼的低質量。當你感覺被迫要加注釋的時辰,推敲一下重寫代碼使其更清楚。

注釋不該寫在用星號或其他字符畫出來的大框里。注釋不該包含諸如制表符和回退符之類的特別字符。

 

5.1 實現注釋的格局(Implementation Comment Formats)

程序可以有4種實現注釋的風格:塊(block)、單行(single-line)、尾端(trailing)和行末(end-of-line)。

 

5.1.1 塊注釋(Block Comments)

塊注釋凡是用於供給對文件,辦法,數據布局和算法的描述。塊注釋被置於每個文件的開端處以及每個辦法之前。它們也可以被用於其他處所,比如辦法內部。在功能和辦法內部的塊注釋應當和它們所描述的代碼具有一樣的縮進格局。

塊注釋之首應當有一個空行,用於把塊注釋和代碼分別開來,比如:

 

  /*
   * Here is ablock comment.
   */

         

塊注釋可以以/*-開首,如許indent(1)就可以將之辨認為一個代碼塊的開端,而不會重排它。

 

  /*-
    * Here is ablock comment with some very special
    * formattingthat I want indent(1) to ignore.
    *
    *    one
    *        two
    *            three
    */

         

重視:若是你不應用indent(1),就不必在代碼中應用/*-,或為他人可能對你的代碼運行indent(1)作讓步。

拜見"文檔注釋"

 

5.1.2 單行注釋(Single-Line Comments)

短注釋可以顯示在一行內,並與厥后的代碼具有一樣的縮進層級。若是一個注釋不克不及在一行內寫完,就該采取塊注釋(拜見"塊注釋")。單行注釋之前應當有一個空行。以下是一個Java代碼中單行注釋的例子:

 

if (condition) {
 
    /* Handle thecondition. */
    ...
}

         

5.1.3 尾端注釋(Trailing Comments)

極短的注釋可以與它們所要描述的代碼位於同一行,然則應當有足夠的空白來分隔代碼和注釋。如有多個短注釋呈現於大段代碼中,它們應當具有雷同的縮進。

以下是一個Java代碼中尾端注釋的例子:

 

if (a == 2) {
    return TRUE;            /* special case */
} else {
    return isPrime(a);      /* works only for odda */
}

         

5.1.4 行末注釋(End-Of-Line Comments)

注釋界定符"//",可以注釋掉整行或者一行中的一項目組。它一般不消於連氣兒多行的注釋文本;然而,它可以用來注釋掉連氣兒多行的代碼段。以下是所有三種風格的例子:

 

if (foo > 1) {
 
    // Do adouble-flip.
    ...
}
else {
    return false;          // Explain why here.
}
 
//if (bar > 1){
//
//    // Do a triple-flip.
//    ...
//}
//else {
//    return false;
//}

         

5.2 文檔注釋(Documentation Comments)

重視:此處描述的注釋格局之典范,拜見"Java源文件典范"

若想懂得更多,拜見"How to Write Doc Comments for Javadoc",此中包含了有關文檔注釋標識表記標幟的信息(@return, @param, @see):

http://java.sun.com/javadoc/writingdoccomments/index.html

若想懂得更多有關文檔注釋和javadoc的具體材料,拜見javadoc的主頁:

http://java.sun.com/javadoc/index.html

文檔注釋描述Java的類、接口、機關器,辦法,以及字段(field)。每個文檔注釋都邑被置於注釋定界符/**...*/之中,一個注釋對應一個類、接口或成員。該注釋應位於聲明之前:

 

  /**
    * The Exampleclass provides ...
    */
  public classExample { ...

         

重視頂層(top-level)的類和接口是不縮進的,而其成員是縮進的。描述類和接口的文檔注釋的第一行(/**)不需縮進;隨后的文檔注釋每行都縮進1格(使星號縱向對齊)。成員,包含機關函數在內,其文檔注釋的第一行縮進4格,隨后每行都縮進5格。

若你想給出有關類、接口、變量或辦法的信息,而這些信息又不合適寫在文檔中,則可應用實現塊注釋(見5.1.1)或緊跟在聲明后面的單行注釋(見5.1.2)。例如,有關一個類實現的細節,應放入緊跟在類聲明后面的實現塊注釋中,而不是放在文檔注釋中。

文檔注釋不克不及放在一個辦法或機關器的定義塊中,因為Java會將位於文檔注釋之后的第一個聲明與其相接洽關系。

 

6 聲明(Declarations)

 

6.1 每行聲明變量的數量(Number Per Line)

推薦一行一個聲明,因為如許以利於寫注釋。亦即,

 

  int level;  // indentation level
  int size;   // size of table

         

要優於,

 

int level, size;

 

不要將不合類型變量的聲明放在同一行,例如:

 

  int foo,  fooarray[];  //WRONG!

 

          

重視:上方的例子中,在類型和標識符之間放了一個空格,另一種被容許的調換體式格式是應用制表符:

 

  int          level;         // indentation level
  int          size;          // size of table
  Object       currentEntry;  // currently ed table entry

         

6.2 初始化(Initialization)

盡量在聲明局部變量的同時初始化。獨一不這么做的來由是變量的初始值依附於某些先前產生的策畫。

 

6.3 布局(Placement)

只在代碼塊的開端處聲明變量。(一個塊是指任何被包含在大括號"{"和"}"中心的代碼。)不要在初次用到該變量時才聲明之。這會把重視力不集中的程序員搞糊塗,同時會故障代碼在該感化域內的可移植性。

 

void myMethod() {
    int int1 = 0;         // beginning of method block
 
    if (condition) {
        int int2 = 0;     // beginning of "if"block
        ...
    }
}

         

該規矩的一個例外是for輪回的索引變量

 

for (int i = 0; i < maxLoops; i++) { ... }


避免聲明的局部變量覆蓋上一級聲明的變量。例如,不要在內部代碼塊中聲明雷同的變量名:

 

 

int count;
...
myMethod() {
    if (condition) {
        int count= 0;     // AVOID!
        ...
    }
    ...
}

         

6.4 類和接口的聲明(Class and Interface Declarations)

當編寫類和接口是,應當遵守以下格局規矩:

 

  •  在辦法名與其參數列表之前的左括號"("間不要有空格
  •  左大括號"{"位於聲明語句同業的末尾
  •  右大括號"}"另起一行,與響應的聲明語句對齊,除非是一個空語句,"}"應緊跟在"{"之后

 

 

class Sample extends Object {
    int ivar1;
    int ivar2;
 
    Sample(int i, int j) {
        ivar1 = i;
        ivar2 = j;
    }
 
    int emptyMethod() {}
 
    ...
}
  •  辦法與辦法之間以空行分隔

 

7 語句(Statements)

 

7.1 簡單語句(Simple Statements)

每行至多包含一條語句,例如:

 

argv++;       // Correct
argc--;       // Correct
argv++; argc--;       // AVOID!

         

7.2 復合語句(Compound Statements)

復合語句是包含在大括號中的語句序列,形如"{ 語句 }"。例如下面各段。

 

  •  被括此中的語句應當較之復合語句縮進一個層次
  •  左大括號"{"應位於復合語句肇端行的行尾;右大括號"}"應另起一行並與復合語句首行對齊。
  •  大括號可以被用於所有語句,包含單個語句,只要這些語句是諸如if-else或for把握布局的一項目組。如許便於添加語句而無需愁悶因為忘了加括號而引入bug。

 

 

7.3 返回語句(return Statements)

一個帶返回值的return語句不應用小括號"()",除非它們以某種體式格式使返回值更為顯見。例如:

 

return;
 
return myDisk.size();
 
return (size ? size : defaultSize);

         

7.4 if,if-else,if else-if else語句(if, if-else, if else-if elseStatements)

if-else語句應當具有如下格局:

 

if (condition) {
    statements;
}
 
if (condition) {
    statements;
} else {
    statements;
}
 
if (condition) {
    statements;
} else if (condition) {
    statements;
} else {
    statements;
}

         

重視:if語句老是用"{"和"}"括起來,避免應用如下輕易引起錯誤的格局:

 

if (condition)//AVOID! THIS OMITS THE BRACES {}!
    statement;

         

7.5 for語句(for Statements)

一個for語句應當具有如下格局:

 

for (initialization; condition; ) {
    statements;
}

         

一個空的for語句(所有工作都在初始化,前提斷定,更新子句中完成)應當具有如下格局:

 

for (initialization; condition; );


當在for語句的初始化或更新子句中應用逗號時,避免因應用三個以上變量,而導致錯雜度進步。若須要,可以在for輪回之前(為初始化子句)或for輪回末尾(為更新子句)應用零丁的語句。

 

 

7.6 while語句(while Statements)

一個while語句應當具有如下格局

 

while (condition) {
    statements;
}

         

一個空的while語句應當具有如下格局:

 

while (condition);

       

 

7.7 do-while語句(do-while Statements)

一個do-while語句應當具有如下格局:

 

do {
    statements;
} while (condition);

         

7.8 switch語句(switch Statements)

一個switch語句應當具有如下格局:

 

switch (condition) {
case ABC:
    statements;
    /* falls through */
case DEF:
    statements;
    break;
 
case XYZ:
    statements;
    break;
 
default:
    statements;
    break;
}

         

每當一個case順着往下履行時(因為沒有break語句),凡是應在break語句的地位添加注釋。上方的示例代碼中就包含注釋/* falls through */。

 

7.9 try-catch語句(try-catch Statements)

一個try-catch語句應當具有如下格局:

 

try {
    statements;
} catch (ExceptionClass e) {
    statements;
}

         

一個try-catch語句后面也可能跟着一個finally語句,非論try代碼塊是否順利履行完,它都邑被履行。

 

try {
    statements;
} catch (ExceptionClass e) {
    statements;
} finally {
    statements;
}

         

8 空白(White Space)

 

8.1 空行(Blank Lines)

空行將邏輯相干的代碼段分隔開,以進步可讀性。

下列景象應當老是應用兩個空行:

 

  •  一個源文件的兩個片段(section)之間
  •  類聲明和接口聲明之間

 

下列景象應當老是應用一個空行:

 

  • 兩個辦法之間
  • 辦法內的局部變量和辦法的第一條語句之間
  • 塊注釋(拜見"5.1.1")或單行注釋(拜見"5.1.2")之前
  • 一個辦法內的兩個邏輯段之間,用以進步可讀性 

 

 

8.2 空格(Blank Spaces)

下列景象應當應用空格:

 

  •  一個緊跟着括號的關鍵字應當被空格分隔,例如:

 

 

    while (true) {
        ...
    }

         

重視:空格不該該置於辦法名與其左括號之間。這將有助於區分關鍵字和辦法調用。

  •  空白應當位於參數列表中逗號的后面
  •  所有的二元運算符,除了".",應當應用空格將之與操縱數分隔。一元操縱符和操縱數之間不因該加空格,比如:負號("-")、自增("++")和自減("--")。例如:

 

 

    a += c + d;
    a = (a + b) /(c * d);
 
    while (d++ = s++) {
        n++;
    }
    printSize("size is " + foo + "
");

         

 

  •  for語句中的表達式應當被空格分隔,例如:

 

 

    for (expr1; expr2; expr3)

 

          

 

  •  強迫轉型后應當跟一個空格,例如:

 

 

 
        
    myMethod((byte) aNum, (Object) x);
    myMethod((int) (cp + 5), ((int) (i + 3))
                                  + 1);

         

9 定名規范(Naming Conventions)

定名規范使程序更易讀,從而更易於懂得。它們也可以供給一些有關標識符功能的信息,以助於懂得代碼,例如,非論它是一個常量,包,還是類。

標識符類型

定名規矩

例子

包(Packages)

一個獨一包名的前綴老是全部小寫的ASCII字母並且是一個域名,凡是是com,edu,gov,mil,net,org,或1981年 ISO 3166標准所指定的標識國度的英文雙字符代碼。包名的后續項目組按照不合機構各自內部的定名規范而不盡雷同。這類定名規范可能以特定目次名的構成來區分部 門(department),項目(project),機械(machine),或注冊名(login names)。

com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese

類(Classes)

定名規矩:類名是個一名詞,采取大小寫混淆的體式格式,每個單詞的首字母大寫。盡量使你的類名簡潔而富於描述。應用完全單詞,避免縮寫詞(除非該縮寫詞被更廣泛應用,像URL,HTML)

class Raster;
class ImageSprite;

接口(Interfaces)

定名規矩:大小寫規矩與類名類似

interface RasterDelegate;
interface Storing;

辦法(Methods)

辦法名是一個動詞,采取大小寫混淆的體式格式,第一個單詞的首字母小寫,厥后單詞的首字母大寫。

run();
runFast();
getBackground();

變量(Variables)

除了變量名外,所有實例,包含類,類常量,均采取大小寫混淆的體式格式,第一個單詞的首字母小寫,厥后單詞的首字母大寫。變量名不該以下划線或美元符號開首,盡管這在語法上是容許的。
變量名應簡短且富於描述。變量名的選用應當易於記憶,即,可以或許指出其用處。盡量避免單個字符的變量名,除非是一次性的姑且變量。姑且變量凡是被取名為i,j,k,m和n,它們一般用於整型;c,d,e,它們一般用於字符型。

char c;
int i;
float myWidth;

實例變量(Instance Variables)

大小寫規矩和變量名類似,除了前面須要一個下划線

int _employeeId;
String _name;
Customer _customer;

常量(Constants)

類常量和ANSI常量的聲明,應當全部大寫,單詞間用下划線隔開。(盡量避免ANSI常量,輕易引起錯誤)

static final int MIN_WIDTH = 4;
static final int MAX_WIDTH = 999;
static final int GET_THE_CPU = 1;

 

10 編程實踐(Programming Practices)

 

10.1 供給對實例以及類變量的接見把握(Providing Access to Instance and Class Variables)

若沒有足夠來由,不要把實例或類變量聲明為公有。凡是,實例變量無需顯式的設置(set)和獲取(gotten),凡是這作為辦法調用的邊沿效應 (side effect)而產生。

一個具有公有實例變量的恰當例子,是類僅作為數據布局,沒有行動。亦即,若你要應用一個布局(struct)而非一個類(若是java支撐布局的話),那么把類的實例變量聲明為公有是合適的。

 

10.2 引用類變量和類辦法(Referring to Class Variables and Methods)

避免用一個對象接見一個類的靜態變量和辦法。應當用類名調換。例如:

 

classMethod();             //OK
AClass.classMethod();      //OK
anObject.classMethod();    //AVOID!

         

10.3 常量(Constants)

位於for輪回中作為計數器值的數字常量,除了-1,0和1之外,不該被直接寫入代碼。

 

10.4 變量賦值(Variable Assignments)

避免在一個語句中給多個變量賦雷同的值。它很難讀懂。例如:

 

fooBar.fChar = barFoo.lchar = ""c""; // AVOID!


不要將賦值運算符用在輕易與相等關系運算符混合的處所。例如:

 

 

if (c++ = d++) {        // AVOID! (Java disallows)
    ...
}

應當寫成

 

if ((c++ = d++) != 0) {
    ...
}

         

不要應用內嵌(embedded)賦值運算符試圖進步運行時的效力,這是編譯器的工作。例如:

 

d = (a = b + c) + r;        // AVOID!


應當寫成

 

 

a = b + c;
d = a + r;

         

10.5 其它實戰(Miscellaneous Practices)

 

10.5.1 圓括號(Parentheses)

一般而言,在含有多種運算符的表達式中應用圓括號來避免運算符優先級題目,是個好辦法。即使運算符的優先級對你而言可能很清楚,但對其他人未必如此。你不克不及假設此外程序員和你一樣清楚運算符的優先級。

 

if (a == b && c == d)      // AVOID!
if ((a == b) && (c == d))  // RIGHT

         

10.5.2 返回值(Returning Values)

設法讓你的程序布局合適目標。例如:

 

if (booleanExpression) {
    return true;
} else {
    return false;
}

         

應當代之以如下辦法:

 

return booleanExpression;


類似地:

 

 

if (condition) {
    return x;
}
return y;

         

應當寫做:

 

return (condition ? x : y);

          

 

10.5.3 前提運算符"?"前的表達式(Expressions before ""?"" in the Conditional Operator)

若是一個包含二元運算符的表達式呈如今三元運算符" ? : "的"?"之前,那么應當給表達式添上一對圓括號。例如:

 

(x >= 0) ? x : -x;

          

10.5.4 特別注釋(Special Comments)

在注釋中應用XXX來標識某些未實現(bogus)的但可以工作(works)的內容。用FIXME來標識某些假的和錯誤的內容。

 

11 代碼示例(Code Examples)

 

11.1 Java源文件示例(Java Source File Example)

下面的例子,顯現了如何公道布局一個包含單一公共類的Java源程序。接口的布局與其類似。更多信息拜見"類和接口聲明"以及"文擋注釋"。

 

/*
 *@(#)Blah.java        1.82 99/03/18
 *
 * Copyright (c)1994-1999 Sun Microsystems, Inc.
 * 901 San AntonioRoad, Palo Alto, California, 94303, U.S.A.
 * All rightsreserved.
 *
 * This software isthe confidential and proprietary information of Sun
 * Microsystems,Inc. ("Confidential Information"). You shall not
 * disclose suchConfidential Information and shall use it only in
 * accordance withthe terms of the license agreement you entered into
 * with Sun.
 */

 
package java.blah;
 
import java.blah.blahdy.BlahBlah;
 
/**
 * Classdescription goes here.
 *
 * @version    1.82 18 Mar 1999
 * @author     Firstname Lastname
 */
public class Blah extends SomeClass {
    /* A classimplementation comment can go here. */
 
    /** classVar1documentation comment */
    public staticint classVar1;
 
    /**
     * classVar2documentation comment that happens to be
     * more thanone line long
     */
    private static ObjectclassVar2;
 
    /**instanceVar1 documentation comment */
    public ObjectinstanceVar1;
 
    /**instanceVar2 documentation comment */
    protected intinstanceVar2;
 
    /**instanceVar3 documentation comment */
    privateObject[] instanceVar3;
 
    /**
     *...constructor Blah documentation comment...
     */
    public Blah() {
        //...implementation goes here...
    }
 
    /**
     * ...methoddoSomething documentation comment...
     */
    public voiddoSomething() {
        //...implementation goes here...
    }
 
    /**
     * ...methoddoSomethingElse documentation comment...
     * @paramsomeParam description
     */
    public voiddoSomethingElse(Object someParam) {
        //...implementation goes here...
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM