溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java語(yǔ)言編碼規(guī)范的示例分析

發(fā)布時(shí)間:2022-01-11 11:30:48 來(lái)源:億速云 閱讀:111 作者:柒染 欄目:編程語(yǔ)言

這篇文章跟大家分析一下“Java語(yǔ)言編碼規(guī)范的示例分析”。內(nèi)容詳細(xì)易懂,對(duì)“Java語(yǔ)言編碼規(guī)范的示例分析”感興趣的朋友可以跟著小編的思路慢慢深入來(lái)閱讀一下,希望閱讀后能夠?qū)Υ蠹矣兴鶐椭O旅娓【幰黄鹕钊雽W(xué)習(xí)“Java語(yǔ)言編碼規(guī)范的示例分析”的知識(shí)吧。

Java語(yǔ)言編碼規(guī)范

1. 文件名(File Names)
這部分列出了常用的文件名及其后綴。
1.1 文件后綴(File Suffixes)
Java程序使用下列文件后綴:
文件類(lèi)別 文件后綴
Java源文件 .java
Java字節(jié)碼文件 .class
1.2 常用文件名(Common File Names)
常用的文件名包括:
文件名 用途
GNUmakefile makefiles的首選文件名。我們采用gnumake來(lái)創(chuàng)建(build)軟件。
README 概述特定目錄下所含內(nèi)容的文件的首選文件名
2 文件組織(File Organization)
一個(gè)文件由被空行分割而成的段落以及標(biāo)識(shí)每個(gè)段落的可選注釋共同組成。超過(guò)2000行的程序難以閱讀,應(yīng)該盡量避免。"Java源文件范例"提供了一個(gè)布局合理的Java程序范例。
2.1 Java源文件(Java Source Files)
每個(gè)Java源文件都包含一個(gè)單一的公共類(lèi)或接口。若私有類(lèi)和接口與一個(gè)公共類(lèi)相關(guān)聯(lián),可以將它們和公共類(lèi)放入同一個(gè)源文件。公共類(lèi)必須是這個(gè)文件中的第一個(gè)類(lèi)或接口。
Java源文件還遵循以下規(guī)則:
- 開(kāi)頭注釋?zhuān)▍⒁?jiàn)"開(kāi)頭注釋")
- 包和引入語(yǔ)句(參見(jiàn)"包和引入語(yǔ)句")
- 類(lèi)和接口聲明(參見(jiàn)"類(lèi)和接口聲明")
2.1.1 開(kāi)頭注釋(Beginning Comments)
所有的源文件都應(yīng)該在開(kāi)頭有一個(gè)C語(yǔ)言風(fēng)格的注釋?zhuān)渲辛谐鲱?lèi)名、版本信息、日期和版權(quán)聲明:
/*
* Classname
*
* Version information
*
* Date
*
* Copyright notice
*/

2.1.2 包和引入語(yǔ)句(Package and Import Statements)
在多數(shù)Java源文件中,第一個(gè)非注釋行是包語(yǔ)句。在它之后可以跟引入語(yǔ)句。例如:
package java.awt;

import java.awt.peer.CanvasPeer;

2.1.3 類(lèi)和接口聲明(Class and Interface Declarations)
下表描述了類(lèi)和接口聲明的各個(gè)部分以及它們出現(xiàn)的先后次序。參見(jiàn)"Java源文件范例"中一個(gè)包含注釋的例子。
類(lèi)/接口聲明的各部分 注解
1 類(lèi)/接口文檔注釋(/**……*/) 該注釋中所需包含的信息,參見(jiàn)"文檔注釋"
2 類(lèi)或接口的聲明
3 類(lèi)/接口實(shí)現(xiàn)的注釋(/*……*/)如果有必要的話 該注釋?xiě)?yīng)包含任何有關(guān)整個(gè)類(lèi)或接口的信息,而這些信息又不適合作為類(lèi)/接口文檔注釋。
4 類(lèi)的(靜態(tài))變量 首先是類(lèi)的公共變量,隨后是保護(hù)變量,再后是包一級(jí)別的變量(沒(méi)有訪問(wèn)修飾符,access modifier),最后是私有變量。
5 實(shí)例變量 首先是公共級(jí)別的,隨后是保護(hù)級(jí)別的,再后是包一級(jí)別的(沒(méi)有訪問(wèn)修飾符),最后是私有級(jí)別的。
6 構(gòu)造器
7 方法 這些方法應(yīng)該按功能,而非作用域或訪問(wèn)權(quán)限,分組。例如,一個(gè)私有的類(lèi)方法可以置于兩個(gè)公有的實(shí)例方法之間。其目的是為了更便于閱讀和理解代碼。
3 縮進(jìn)排版(Indentation)
4個(gè)空格常被作為縮進(jìn)排版的一個(gè)單位??s進(jìn)的確切解釋并未詳細(xì)指定(空格 vs. 制表符)。一個(gè)制表符等于8個(gè)空格(而非4個(gè))。
3.1 行長(zhǎng)度(Line Length)
盡量避免一行的長(zhǎng)度超過(guò)80個(gè)字符,因?yàn)楹芏嘟K端和工具不能很好處理之。
注意:用于文檔中的例子應(yīng)該使用更短的行長(zhǎng),長(zhǎng)度一般不超過(guò)70個(gè)字符。
3.2 換行(Wrapping Lines)
當(dāng)一個(gè)表達(dá)式無(wú)法容納在一行內(nèi)時(shí),可以依據(jù)如下一般規(guī)則斷開(kāi)之:
- 在一個(gè)逗號(hào)后面斷開(kāi)
- 在一個(gè)操作符前面斷開(kāi)
- 寧可選擇較高級(jí)別(higher-level)的斷開(kāi),而非較低級(jí)別(lower-level)的斷開(kāi)
- 新的一行應(yīng)該與上一行同一級(jí)別表達(dá)式的開(kāi)頭處對(duì)齊
- 如果以上規(guī)則導(dǎo)致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代之以縮進(jìn)8個(gè)空格。
以下是斷開(kāi)方法調(diào)用的一些例子:
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);

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

以下是兩個(gè)斷開(kāi)算術(shù)表達(dá)式的例子。前者更好,因?yàn)閿嚅_(kāi)處位于括號(hào)表達(dá)式的外邊,這是個(gè)較高級(jí)別的斷開(kāi)。
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6; //PREFFER

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

以下是兩個(gè)縮進(jìn)方法聲明的例子。前者是常規(guī)情形。后者若使用常規(guī)的縮進(jìn)方式將會(huì)使第二行和第三行移得很靠右,所以代之以縮進(jìn)8個(gè)空格
//CONVENTIONAL INDENTATION
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}

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

if語(yǔ)句的換行通常使用8個(gè)空格的規(guī)則,因?yàn)槌R?guī)縮進(jìn)(4個(gè)空格)會(huì)使語(yǔ)句體看起來(lái)比較費(fèi)勁。比如:
//DON’T USE THIS INDENTATION
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) { //BAD WRAPS
doSomethingAboutIt(); //MAKE THIS LINE EASY TO MISS
}

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

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

這里有三種可行的方法用于處理三元運(yùn)算表達(dá)式:
alpha = (aLongBooleanExpression) ? beta : gamma;

alpha = (aLongBooleanExpression) ? beta
: gamma;

alpha = (aLongBooleanExpression)
? beta
: gamma;
4 注釋(Comments)

Java程序有兩類(lèi)注釋?zhuān)簩?shí)現(xiàn)注釋(implementation comments)和文檔注釋(document comments)。實(shí)現(xiàn)注釋是那些在C++中見(jiàn)過(guò)的,使用/*...*/和//界定的注釋。文檔注釋(被稱(chēng)為"doc comments")是Java獨(dú)有的,并由/**...*/界定。文檔注釋可以通過(guò)javadoc工具轉(zhuǎn)換成HTML文件。

實(shí)現(xiàn)注釋用以注釋代碼或者實(shí)現(xiàn)細(xì)節(jié)。文檔注釋從實(shí)現(xiàn)自由(implementation-free)的角度描述代碼的規(guī)范。它可以被那些手頭沒(méi)有源碼的開(kāi)發(fā)人員讀懂。

注釋?xiě)?yīng)被用來(lái)給出代碼的總括,并提供代碼自身沒(méi)有提供的附加信息。注釋?xiě)?yīng)該僅包含與閱讀和理解程序有關(guān)的信息。例如,相應(yīng)的包如何被建立或位于哪個(gè)目錄下之類(lèi)的信息不應(yīng)包括在注釋中。

在注釋里,對(duì)設(shè)計(jì)決策中重要的或者不是顯而易見(jiàn)的地方進(jìn)行說(shuō)明是可以的,但應(yīng)避免提供代碼中己清晰表達(dá)出來(lái)的重復(fù)信息。多余的的注釋很容易過(guò)時(shí)。通常應(yīng)避免那些代碼更新就可能過(guò)時(shí)的注釋。

注意:頻繁的注釋有時(shí)反映出代碼的低質(zhì)量。當(dāng)你覺(jué)得被迫要加注釋的時(shí)候,考慮一下重寫(xiě)代碼使其更清晰。

注釋不應(yīng)寫(xiě)在用星號(hào)或其他字符畫(huà)出來(lái)的大框里。注釋不應(yīng)包括諸如制表符和回退符之類(lèi)的特殊字符。

4.1 實(shí)現(xiàn)注釋的格式(Implementation Comment Formats)

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

4.1.1 塊注釋(Block Comments)

塊注釋通常用于提供對(duì)文件,方法,數(shù)據(jù)結(jié)構(gòu)和算法的描述。塊注釋被置于每個(gè)文件的開(kāi)始處以及每個(gè)方法之前。它們也可以被用于其他地方,比如方法內(nèi)部。在功能和方法內(nèi)部的塊注釋?xiě)?yīng)該和它們所描述的代碼具有一樣的縮進(jìn)格式。

塊注釋之首應(yīng)該有一個(gè)空行,用于把塊注釋和代碼分割開(kāi)來(lái),比如:


/*
* Here is a block comment.
*/


塊注釋可以以/*-開(kāi)頭,這樣indent(1)就可以將之識(shí)別為一個(gè)代碼塊的開(kāi)始,而不會(huì)重排它。


/*-
* Here is a block comment with some very special
* formatting that I want indent(1) to ignore.
*
* one
* two
* three
*/


注意:如果你不使用indent(1),就不必在代碼中使用/*-,或?yàn)樗丝赡軐?duì)你的代碼運(yùn)行indent(1)作讓步。



4.1.2 單行注釋(Single-Line Comments)

短注釋可以顯示在一行內(nèi),并與其后的代碼具有一樣的縮進(jìn)層級(jí)。如果一個(gè)注釋不能在一行內(nèi)寫(xiě)完,就該采用塊注釋(參見(jiàn)"塊注釋")。單行注釋之前應(yīng)該有一個(gè)空行。以下是一個(gè)Java代碼中單行注釋的例子:


if (condition) {

/* Handle the condition. */
...
}

4.1.3 尾端注釋(Trailing Comments)

極短的注釋可以與它們所要描述的代碼位于同一行,但是應(yīng)該有足夠的空白來(lái)分開(kāi)代碼和注釋。若有多個(gè)短注釋出現(xiàn)于大段代碼中,它們應(yīng)該具有相同的縮進(jìn)。

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

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


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

注釋界定符"//",可以注釋掉整行或者一行中的一部分。它一般不用于連續(xù)多行的注釋文本;然而,它可以用來(lái)注釋掉連續(xù)多行的代碼段。以下是所有三種風(fēng)格的例子:


if (foo > 1) {

// Do a double-flip.
...
}
else {
return false; // Explain why here.
}

//if (bar > 1) {
//
// // Do a triple-flip.
// ...
//}
//else {
// return false;
//}


4.2 文檔注釋(Documentation Comments)

注意:此處描述的注釋格式之范例,參見(jiàn)"Java源文件范例"

若想了解更多,參見(jiàn)"How to Write Doc Comments for Javadoc",其中包含了有關(guān)文檔注釋標(biāo)記的信息(@return, @param, @see):

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

若想了解更多有關(guān)文檔注釋和javadoc的詳細(xì)資料,參見(jiàn)javadoc的主頁(yè):

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

文檔注釋描述Java的類(lèi)、接口、構(gòu)造器,方法,以及字段(field)。每個(gè)文檔注釋都會(huì)被置于注釋定界符/**...*/之中,一個(gè)注釋對(duì)應(yīng)一個(gè)類(lèi)、接口或成員。該注釋?xiě)?yīng)位于聲明之前:


/**
* The Example class provides ...
*/
public class Example { ...


注意頂層(top-level)的類(lèi)和接口是不縮進(jìn)的,而其成員是縮進(jìn)的。描述類(lèi)和接口的文檔注釋的第一行(/**)不需縮進(jìn);隨后的文檔注釋每行都縮進(jìn)1格(使星號(hào)縱向?qū)R)。成員,包括構(gòu)造函數(shù)在內(nèi),其文檔注釋的第一行縮進(jìn)4格,隨后每行都縮進(jìn)5格。

若你想給出有關(guān)類(lèi)、接口、變量或方法的信息,而這些信息又不適合寫(xiě)在文檔中,則可使用實(shí)現(xiàn)塊注釋(見(jiàn)5.1.1)或緊跟在聲明后面的單行注釋(見(jiàn)5.1.2)。例如,有關(guān)一個(gè)類(lèi)實(shí)現(xiàn)的細(xì)節(jié),應(yīng)放入緊跟在類(lèi)聲明后面的實(shí)現(xiàn)塊注釋中,而不是放在文檔注釋中。

文檔注釋不能放在一個(gè)方法或構(gòu)造器的定義塊中,因?yàn)镴ava會(huì)將位于文檔注釋之后的第一個(gè)聲明與其相關(guān)聯(lián)。

5 聲明(Declarations)

5.1 每行聲明變量的數(shù)量(Number Per Line)

推薦一行一個(gè)聲明,因?yàn)檫@樣以利于寫(xiě)注釋。亦即,


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


要優(yōu)于,

int level, size;

不要將不同類(lèi)型變量的聲明放在同一行,例如:


int foo, fooarray[]; //WRONG!


注意:上面的例子中,在類(lèi)型和標(biāo)識(shí)符之間放了一個(gè)空格,另一種被允許的替代方式是使用制表符:


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


5.2 初始化(Initialization)

盡量在聲明局部變量的同時(shí)初始化。唯一不這么做的理由是變量的初始值依賴(lài)于某些先前發(fā)生的計(jì)算。

關(guān)于Java語(yǔ)言編碼規(guī)范的示例分析就分享到這里啦,希望上述內(nèi)容能夠讓大家有所提升。如果想要學(xué)習(xí)更多知識(shí),請(qǐng)大家多多留意小編的更新。謝謝大家關(guān)注一下億速云網(wǎng)站!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI