Google 的 Java 編碼規范,參考學習!

目錄

01?術語說明和指南說明

02?源文件基礎

2.1 文件名

2.2 文件編碼:UTF-8

2.3 特殊字符

03?源文件結構

3.1 許可證或版權信息

3.2 package語句

3.3 import語句

3.4 類聲明

04?格式

4.1 大括號

4.3 一行一個語句

4.4 列限制:80 或 100

4.5 自動換行

4.6 空白

4.7 用小括號來限定組:推薦

4.8 具體結構

05?命名約定

5.1 對所有標識符都通用的規則

5.2 標識符類型的規則

5.3 駝峰式命名法(CamelCase)

?

06?編程實踐

6.1 @Override:能用則用

6.2 捕獲的異常:不能忽視

6.3 靜態成員:使用類進行調用

6.4 Finalizers:禁用

07?Javadoc

7.1 格式

7.2 摘要片段

7.3 哪里需要使用 Javadoc


這份文檔是 Google Java 編程風格規范的完整定義。當且僅當一個 Java 源文件符合此文檔中的規則, 我們才認為它符合 Google 的 Java 編程風格。

與其它的編程風格指南一樣,這里所討論的不僅僅是編碼格式美不美觀的問題, 同時也討論一些約定及編碼標準。然而,這份文檔主要側重于我們所普遍遵循的規則, 對于那些不是明確強制要求的,我們盡量避免提供意見。

?

01 術語說明和指南說明

在本文檔中,除非另有說明:

1、術語class可表示一個普通類,枚舉類,接口或是annotation類型( @interface) 2、術語comment只用來指代實現的注釋(implementation comments),我們不使用“documentation comments”一詞,而是用Javadoc。其他的術語說明會偶爾在后面的文檔出現。

本文檔中的示例代碼并不作為規范。也就是說,雖然示例代碼是遵循 Google 編程風格,但并不意味著這是展現這些代碼的唯一方式。示例中的格式選擇不應該被強制定為規則。

?

02 源文件基礎

2.1 文件名

源文件以其最頂層的類名來命名,大小寫敏感,文件擴展名為 .java。

2.2 文件編碼:UTF-8

源文件編碼格式為UTF-8。

2.3 特殊字符

2.3.1 空白字符

除了行結束符序列,ASCII水平空格字符(0x20,即空格)是源文件中唯一允許出現的空白字符,這意味著:

1、所有其它字符串中的空白字符都要進行轉義。2、制表符不用于縮進。

2.3.2 特殊轉義序列

對于具有特殊轉義序列的任何字符(\b, \t, \n, \f, \r, ", '及),我們使用它的轉義序列,而不是相應的八進制(比如 \012)或Unicode(比如 \u000a)轉義。

2.3.3 非 ASCII 字符

對于剩余的非ASCII字符,是使用實際的Unicode字符(比如∞),還是使用等價的Unicode轉義符(比如\u221e),取決于哪個能讓代碼更易于閱讀和理解。

Tip: 在使用Unicode轉義符或是一些實際的Unicode字符時,建議做些注釋給出解釋,這有助于別人閱讀和理解。

例如:

String unitAbbrev = "μs"; | 贊,即使沒有注釋也非常清晰String unitAbbrev = "\u03bcs"; // "μs" | 允許,但沒有理由要這樣做String unitAbbrev = "\u03bcs"; // Greek letter mu, "s" | 允許,但這樣做顯得笨拙還容易出錯String unitAbbrev = "\u03bcs"; | 很糟,讀者根本看不出這是什么return '\ufeff' + content; // byte order mark | Good,對于非打印字符,使用轉義,并在必要時寫上注釋

?

Tip: 永遠不要由于害怕某些程序可能無法正確處理非ASCII字符而讓你的代碼可讀性變差。當程序無法正確處理非ASCII字符時,它自然無法正確運行, 你就會去fix這些問題的了。(言下之意就是大膽去用非ASCII字符,如果真的有需要的話)

?

03 源文件結構

一個源文件包含(按順序地):

1、許可證或版權信息(如有需要)?

2、package 語句?

3、import 語句?

4、一個頂級類(只有一個)

以上每個部分之間用一個空行隔開。

3.1 許可證或版權信息

如果一個文件包含許可證或版權信息,那么它應當被放在文件最前面。

3.2 package語句

package 語句不換行,列限制(4.4節)并不適用于 package 語句。(即package 語句寫在一行里)

3.3 import語句

3.3.1 import不要使用通配符

即,不要出現類似這樣的import語句:importjava.util.*;

3.3.2 不要換行

import語句不換行,列限制(4.4節)并不適用于 import 語句。(每個 import 語句獨立成行)

3.3.3 順序和間距

import 語句可分為以下幾組,按照這個順序,每組由一個空行分隔:

1、所有的靜態導入獨立成組?

2、 com.google imports(僅當這個源文件是在 com.google 包下)?

3、第三方的包。每個頂級包為一組,字典序。例如:android, com, junit, org, sun

4、 java imports?

5、 javax imports

組內不空行,按字典序排列。

3.4 類聲明

3.4.1 只有一個頂級類聲明

每個頂級類都在一個與它同名的源文件中(當然,還包含 .java 后綴)。

例外:package-info.java,該文件中可沒有 package-info 類。

3.4.2 類成員順序

類的成員順序對易學性有很大的影響,但這也不存在唯一的通用法則。不同的類對成員的排序可能是不同的。最重要的一點,每個類應該以某種邏輯去排序它的成員,維護者應該要能解釋這種排序邏輯。

比如, 新的方法不能總是習慣性地添加到類的結尾,因為這樣就是按時間順序而非某種邏輯來排序的。

3.4.2.1 重載:永不分離

當一個類有多個構造函數,或是多個同名方法,這些函數/方法應該按順序出現在一起,中間不要放進其它函數/方法。

?

04 格式

術語說明:塊狀結構(block-like construct)指的是一個類,方法或構造函數的主體。需要注意的是,數組初始化中的初始值可被選擇性地視為塊狀結構(4.8.3.1節)。

4.1 大括號

4.1.1 使用大括號(即使是可選的)

大括號與 if,else,for,do,while 語句一起使用,即使只有一條語句(或是空),也應該把大括號寫上。

4.1.2 非空塊:K & R 風格

對于非空塊和塊狀結構,大括號遵循Kernighan和Ritchie風格 (Egyptian brackets):

1、左大括號前不換行?

2、左大括號后換行?

3、右大括號前換行?

4、如果右大括號是一個語句、函數體或類的終止,則右大括號后換行; 否則不換行。例如,如果右大括號后面是else或逗號,則不換行。

示例:

return new MyClass() {@Override public void method() {if (condition()) {try {something();} catch (ProblemException e) {recover();}}}
};

4.8.1節給出了 enum 類的一些例外。

4.1.3 空塊:可以用簡潔版本

一個空的塊狀結構里什么也不包含,大括號可以簡潔地寫成 {},不需要換行。例外:如果它是一個多塊語句的一部分(if/else 或 try/catch/finally) ,即使大括號內沒內容,右大括號也要換行。

示例:

void doNothing() {}

4.2 塊縮進:2 個空格

每當開始一個新的塊,縮進增加2個空格,當塊結束時,縮進返回先前的縮進級別。縮進級別適用于代碼和注釋。(見4.1.2節中的代碼示例)

4.3 一行一個語句

每個語句后要換行。

4.4 列限制:80 或 100

一個項目可以選擇一行 80 個字符或 100 個字符的列限制,除了下述例外,任何一行如果超過這個字符數限制,必須自動換行。

例外:

1、不可能滿足列限制的行(例如,Javadoc 中的一個長 URL,或是一個長的 JSNI 方法參考)。

2、 package和 import語句(見3.2節和3.3節)。

3、注釋中那些可能被剪切并粘貼到shell中的命令行。

4.5 自動換行

術語說明:一般情況下,一行長代碼為了避免超出列限制(80或100個字符)而被分為多行,我們稱之為自動換行(line-wrapping)。

我們并沒有全面,確定性的準則來決定在每一種情況下如何自動換行。很多時候,對于同一段代碼會有好幾種有效的自動換行方式。

Tip: 提取方法或局部變量可以在不換行的情況下解決代碼過長的問題(是合理縮短命名長度吧)

4.5.1 從哪里斷開

自動換行的基本準則是:更傾向于在更高的語法級別處斷開。

1、如果在 非賦值運算符處斷開,那么在該符號前斷開(比如+,它將位于下一行)。注意:這一點與Google其它語言的編程風格不同(如C++和JavaScript)。這條規則也適用于以下“類運算符”符號:點分隔符(.),類型界限中的&( <TextendsFoo&Bar>),catch塊中的管道符號( catch(FooException|BarExceptione)

2、如果在 賦值運算符處斷開,通常的做法是在該符號后斷開(比如=,它與前面的內容留在同一行)。這條規則也適用于 foreach語句中的分號。

3、方法名或構造函數名與左括號留在同一行。

4、逗號(,)與其前面的內容留在同一行。

4.5.2 自動換行時縮進至少+4個空格

自動換行時,第一行后的每一行至少比第一行多縮進4個空格(注意:制表符不用于縮進。見2.3.1節)。

當存在連續自動換行時,縮進可能會多縮進不只4個空格(語法元素存在多級時)。一般而言,兩個連續行使用相同的縮進當且僅當它們開始于同級語法元素。

第4.6.3水平對齊一節中指出,不鼓勵使用可變數目的空格來對齊前面行的符號。

4.6 空白

4.6.1 垂直空白

以下情況需要使用一個空行:

1、類內連續的成員之間:字段,構造函數,方法,嵌套類,靜態初始化塊,實例初始化塊。

例如:兩個連續字段之間的空行是可選的,用于字段的空行主要用來對字段進行邏輯分組。

2、在函數體內,語句的邏輯分組間使用空行。

3、類內的第一個成員前或最后一個成員后的空行是可選的(既不鼓勵也不反對這樣做,視個人喜好而定)。

4、要滿足本文檔中其他節的空行要求(比如3.3節:import語句)

多個連續的空行是允許的,但沒有必要這樣做(我們也不鼓勵這樣做)。

4.6.2 水平空白

除了語言需求和其它規則,并且除了文字,注釋和Javadoc用到單個空格,單個ASCII空格也出現在以下幾個地方:

1、分隔任何保留字與緊隨其后的左括號( ()(如 if,forcatch等)。

2、分隔任何保留字與其前面的右大括號( })(如 else,catch)。

3、在任何左大括號前( {),兩個例外:

@SomeAnnotation({a,b})(不使用空格)。String[][]x=foo;(大括號間沒有空格,見下面的Note)。

4、在任何二元或三元運算符的兩側。這也適用于以下“類運算符”符號:

類型界限中的&( <TextendsFoo&Bar>)。catch塊中的管道符號( catch(FooException|BarExceptione)。foreach語句中的分號。

5、在 ,:;及右括號( ))后

6、如果在一條語句后做注釋,則雙斜杠(//)兩邊都要空格。這里可以允許多個空格,但沒有必要。

7、類型和變量之間:List<string>list。</string>

8、數組初始化中,大括號內的空格是可選的,即 newint[]{5,6}和 newint[]{5,6}都是可以的。

Note:這個規則并不要求或禁止一行的開關或結尾需要額外的空格,只對內部空格做要求。

4.6.3 水平對齊:不做要求

術語說明:水平對齊指的是通過增加可變數量的空格來使某一行的字符與上一行的相應字符對齊。

這是允許的(而且在不少地方可以看到這樣的代碼),但Google編程風格對此不做要求。即使對于已經使用水平對齊的代碼,我們也不需要去保持這種風格。

以下示例先展示未對齊的代碼,然后是對齊的代碼:

private int x; // this is fine
private Color color; // this too
private int  x;       // permitted, but future edits
private Color color;  // may leave it unaligned

Tip:對齊可增加代碼可讀性,但它為日后的維護帶來問題。考慮未來某個時候,我們需要修改一堆對齊的代碼中的一行。這可能導致原本很漂亮的對齊代碼變得錯位。很可能它會提示你調整周圍代碼的空白來使這一堆代碼重新水平對齊(比如程序員想保持這種水平對齊的風格), 這就會讓你做許多的無用功,增加了reviewer的工作并且可能導致更多的合并沖突。

4.7 用小括號來限定組:推薦

除非作者和reviewer都認為去掉小括號也不會使代碼被誤解,或是去掉小括號能讓代碼更易于閱讀,否則我們不應該去掉小括號。我們沒有理由假設讀者能記住整個Java運算符優先級表。

4.8 具體結構

4.8.1 枚舉類

枚舉常量間用逗號隔開,換行可選。

沒有方法和文檔的枚舉類可寫成數組初始化的格式:

private enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS }

4.8.2.1 每次只聲明一個變量

不要使用組合聲明,比如 inta,b;。

4.8.2.2 需要時才聲明,并盡快進行初始化

不要在一個代碼塊的開頭把局部變量一次性都聲明了(這是 c 語言的做法),而是在第一次需要使用它時才聲明。局部變量在聲明時最好就進行初始化,或者聲明后盡快進行初始化。

4.8.3 數組

4.8.3.1 數組初始化:可寫成塊狀結構

數組初始化可以寫成塊狀結構,比如,下面的寫法都是 OK 的:
?

new int[] {0, 1, 2, 3 
}new int[] {0,1,2,3
}new int[] {
???????    0, 1,2, 3
}??????new int[]{0, 1, 2, 3}???????

4.8.3.2 非C風格的數組聲明

???????中括號是類型的一部分:String[]args, 而非 Stringargs[]。

4.8.4 switch 語句

術語說明:switch塊的大括號內是一個或多個語句組。每個語句組包含一個或多個switch標簽( caseFOO:或 default:),后面跟著一條或多條語句。switch case 支持的 6 種數據類型,推薦大家看下。

4.8.4.1 縮進

與其它塊狀結構一致,switch 塊中的內容縮進為 2 個空格。

每個 switch 標簽后新起一行,再縮進2個空格,寫下一條或多條語句。

4.8.4.2 Fall-through:注釋

在一個 switch 塊內,每個語句組要么通過 break,continue,return 或拋出異常來終止,要么通過一條注釋來說明程序將繼續執行到下一個語句組, 任何能表達這個意思的注釋都是OK的(典型的是用 // fall through)。這個特殊的注釋并不需要在最后一個語句組(一般是 default)中出現。示例:
?

switch (input) {case 1:case 2:prepareOneOrTwo();// fall throughcase 3:handleOneTwoOrThree();break;default:handleLargeNumber(input);
}

4.8.4.3 default 的情況要寫出來

每個 switch 語句都包含一個 default 語句組,即使它什么代碼也不包含。

4.8.5 注解(Annotations)

注解緊跟在文檔塊后面,應用于類、方法和構造函數,一個注解獨占一行。這些換行不屬于自動換行(第4.5節,自動換行),因此縮進級別不變。例如:

@Override
@Nullable
public String getNameIfPresent() { ... }

例外:單個的注解可以和簽名的第一行出現在同一行。例如:

@Override public int hashCode() { ... }

應用于字段的注解緊隨文檔塊出現,應用于字段的多個注解允許與字段出現在同一行。例如:

@Partial @Mock DataLoader loader;

參數和局部變量注解沒有特定規則。

4.8.6 注釋

4.8.6.1 塊注釋風格

塊注釋與其周圍的代碼在同一縮進級別。它們可以是 /* ... */風格,也可以是 // ...風格。對于多行的 /* ... */注釋,后續行必須從 *開始, 并且與前一行的 *對齊。?

/*
* This is     // And so      /* Or you can
* okay.       // is this.     * even do this. */
*/

注釋不要封閉在由星號或其它字符繪制的框架里。

Tip:在寫多行注釋時,如果你希望在必要時能重新換行(即注釋像段落風格一樣),那么使用 /* ... */。

4.8.7 Modifiers

類和成員的 modifiers 如果存在,則按 Java 語言規范中推薦的順序出現。

public protected private abstract static final transient volatile synchronized native strictfp

05 命名約定

5.1 對所有標識符都通用的規則

標識符只能使用 ASCII 字母和數字,因此每個有效的標識符名稱都能匹配正則表達式 \w+。

在 Google 其它編程語言風格中使用的特殊前綴或后綴,如 name_, mName, s_name 和 kName,在 Java 編程風格中都不再使用。

5.2 標識符類型的規則

5.2.1 包名

包名全部小寫,連續的單詞只是簡單地連接起來,不使用下劃線。

5.2.2 類名

類名都以 UpperCamelCase 風格編寫。

類名通常是名詞或名詞短語,接口名稱有時可能是形容詞或形容詞短語。現在還沒有特定的規則或行之有效的約定來命名注解類型。

測試類的命名以它要測試的類的名稱開始,以 Test 結束。例如,?HashTest 或 HashIntegrationTest。

5.2.3 方法名

方法名都以 lowerCamelCase 風格編寫。

方法名通常是動詞或動詞短語。

下劃線可能出現在 JUnit 測試方法名稱中用以分隔名稱的邏輯組件。一個典型的模式是:test<MethodUnderTest>_<state>,例如 testPop_emptyStack。并不存在唯一正確的方式來命名測試方法。

5.2.4 常量名

常量名命名模式為 CONSTANT_CASE,全部字母大寫,用下劃線分隔單詞。那,到底什么算是一個常量?

每個常量都是一個靜態 final 字段,但不是所有靜態 final 字段都是常量。在決定一個字段是否是一個常量時, 考慮它是否真的感覺像是一個常量。例如,如果任何一個該實例的觀測狀態是可變的,則它幾乎肯定不會是一個常量。只是永遠不 打算改變對象一般是不夠的,它要真的一直不變才能將它示為常量。


// Constants
static final int NUMBER = 5;
static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann");
static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable
static final SomeMutableType[] EMPTY_ARRAY = {};
enum SomeEnum { ENUM_CONSTANT }
// Not constants
static String nonFinal = "non-final";
final String nonStatic = "non-static";
static final Set<String> mutableCollection = new HashSet<String>();
static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable);
static final Logger logger = Logger.getLogger(MyClass.getName());
static final String[] nonEmptyArray = {"these", "can", "change"};

這些名字通常是名詞或名詞短語。

5.2.5 非常量字段名

非常量字段名以 lowerCamelCase 風格編寫。

這些名字通常是名詞或名詞短語。

5.2.6 參數名

參數名以 lowerCamelCase 風格編寫。

參數應該避免用單個字符命名。

5.2.7 局部變量名

局部變量名以 lowerCamelCase 風格編寫,比起其它類型的名稱,局部變量名可以有更為寬松的縮寫。

雖然縮寫更寬松,但還是要避免用單字符進行命名,除了臨時變量和循環變量。

即使局部變量是 final 和不可改變的,也不應該把它示為常量,自然也不能用常量的規則去命名它。

5.2.8 類型變量名

類型變量可用以下兩種風格之一進行命名:

1、單個的大寫字母,后面可以跟一個數字(如:E, T, X, T2)。2、以類命名方式(5.2.2節),后面加個大寫的T(如:RequestT, FooBarT)。

5.3 駝峰式命名法(CamelCase)

駝峰式命名法分大駝峰式命名法(UpperCamelCase)和小駝峰式命名法( lowerCamelCase)。有時,我們有不只一種合理的方式將一個英語詞組轉換成駝峰形式,如縮略語或不尋常的結構(例如”IPv6”或”iOS”)。Google 指定了以下的轉換方案。

名字從散文形式(prose form)開始:

1、把短語轉換為純 ASCII 碼,并且移除任何單引號。例如:”Müller’s algorithm”將變成”Muellers algorithm”。

2、把這個結果切分成單詞,在空格或其它標點符號(通常是連字符)處分割開。

推薦:如果某個單詞已經有了常用的駝峰表示形式,按它的組成將它分割開(如”AdWords”將分割成”ad words”)。需要注意的是”iOS”并不是一個真正的駝峰表示形式,因此該推薦對它并不適用。

3、現在將所有字母都小寫(包括縮寫),然后將單詞的第一個字母大寫:每個單詞的第一個字母都大寫,來得到大駝峰式命名。除了第一個單詞,每個單詞的第一個字母都大寫,來得到小駝峰式命名。

4、最后將所有的單詞連接起來得到一個標識符。

示例:
?

Prose form                 Correct                 Incorrect------------------------------------------------------------------"XML HTTP request"         XmlHttpRequest         XMLHTTPRequest"new customer ID"          newCustomerId          newCustomerID"inner stopwatch"          innerStopwatch         innerStopWatch"supports IPv6 on iOS?"    supportsIpv6OnIos      supportsIPv6OnIOS"YouTube importer"         YouTubeImporterYoutubeImporter*

加星號處表示可以,但不推薦。

Note:在英語中,某些帶有連字符的單詞形式不唯一。例如:”nonempty”和”non-empty”都是正確的,因此方法名 checkNonempty和 checkNonEmpty也都是正確的。

?

06 編程實踐

6.1 @Override:能用則用

只要是合法的,就把 @Override 注解給用上。

6.2 捕獲的異常:不能忽視

除了下面的例子,對捕獲的異常不做響應是極少正確的。(典型的響應方式是打印日志,或者如果它被認為是不可能的,則把它當作一個 AssertionError重新拋出。)

如果它確實是不需要在catch塊中做任何響應,需要做注釋加以說明(如下面的例子)。
?

try {???????int i = Integer.parseInt(response);return handleNumericResponse(i);
} catch (NumberFormatException ok) {// it's not numeric; that's fine, just continue
}
return handleTextResponse(response);

例外:在測試中,如果一個捕獲的異常被命名為 expected,則它可以被不加注釋地忽略。下面是一種非常常見的情形,用以確保所測試的方法會拋出一個期望中的異常, 因此在這里就沒有必要加注釋。
?

try {emptyStack.pop();fail();} catch (NoSuchElementException expected) {}

6.3 靜態成員:使用類進行調用

使用類名調用靜態的類成員,而不是具體某個對象或表達式。
?

Foo aFoo = ...;
Foo.aStaticMethod(); // good
aFoo.aStaticMethod(); // bad
somethingThatYieldsAFoo().aStaticMethod(); // very bad

6.4 Finalizers:禁用

極少會去重寫 Object.finalize。

Tip:不要使用 finalize。如果你非要使用它,請先仔細閱讀和理解 Effective Java 第7條款:“Avoid Finalizers”,然后不要使用它。

07 Javadoc

7.1 格式

7.1.1 一般形式

Javadoc 塊的基本格式如下所示:

/**
* Multiple lines of Javadoc text are written here,
* wrapped normally...
*/
public int method(String p1) { ... }

?

或者是以下單行形式:

/** An especially short bit of Javadoc. */

基本格式總是 OK 的。當整個 Javadoc 塊能容納于一行時(且沒有 Javadoc 標記@XXX),可以使用單行形式。

7.1.2 段落

空行(即,只包含最左側星號的行)會出現在段落之間和 Javadoc 標記(@XXX)之前(如果有的話)。除了第一個段落,每個段落第一個單詞前都有標簽 <p>,并且它和第一個單詞間沒有空格。

7.1.3 Javadoc標記

標準的 Javadoc 標記按以下順序出現:@param, @return, @throws, @deprecated, 前面這4種標記如果出現,描述都不能為空。當描述無法在一行中容納,連續行需要至少再縮進4個空格。

7.2 摘要片段

每個類或成員的 Javadoc 以一個簡短的摘要片段開始。這個片段是非常重要的,在某些情況下,它是唯一出現的文本,比如在類和方法索引中。

這只是一個小片段,可以是一個名詞短語或動詞短語,但不是一個完整的句子。它不會以 A{@codeFoo}isa...或 Thismethod returns...開頭, 它也不會是一個完整的祈使句,如 Savethe record...。然而,由于開頭大寫及被加了標點,它看起來就像是個完整的句子。

Tip:一個常見的錯誤是把簡單的Javadoc寫成 /** @return the customer ID */,這是不正確的。它應該寫成 /** Returns the customer ID. */。

7.3 哪里需要使用 Javadoc

至少在每個public類及它的每個 public 和 protected 成員處使用 Javadoc,以下是一些例外:

7.3.1 例外:不言自明的方法

對于簡單明顯的方法如 getFoo,Javadoc是可選的(即,是可以不寫的)。這種情況下除了寫“Returns the foo”,確實也沒有什么值得寫了。

單元測試類中的測試方法可能是不言自明的最常見例子了,我們通常可以從這些方法的描述性命名中知道它是干什么的,因此不需要額外的文檔說明。

Tip:如果有一些相關信息是需要讀者了解的,那么以上的例外不應作為忽視這些信息的理由。例如,對于方法名 getCanonicalName, 就不應該忽視文檔說明,因為讀者很可能不知道詞語 canonical name 指的是什么。

7.3.2 例外:重寫

如果一個方法重寫了超類中的方法,那么 Javadoc 并非必需的。

7.3.3 可選的 Javadoc

對于包外不可見的類和方法,如有需要,也是要使用 Javadoc 的。如果一個注釋是用來定義一個類,方法,字段的整體目的或行為, 那么這個注釋應該寫成 Javadoc,這樣更統一更友好。

?

原文:google.github.io/styleguide/javaguide.html

譯者:Hawstein

來源:hawstein.com/2014/01/20/google-java-style/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285738.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285738.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285738.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL Schema與數據類型的優化

選擇優化的數據類型&#xff1a; 1、 更小的通常更好&#xff1a; 一般情況下&#xff0c;應該盡量使用可以正確存儲數據的最小數據類型。更小的數據類型通常更快&#xff0c;因為他們占用更少的磁盤&#xff0c;內存和cpu緩存&#xff0c;并且處理時需要的cpu周期也更少。 2、…

【Pix4d精品教程】Pix4d中央子午線細化設置(測區跨兩個分帶)

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) 航測內業中,在自由空三結束之后,需要導入像控點,進而去刺像控點。但是當測區跨兩個分帶的時候(如測區正好處在3度帶105和108中間),像控點可能距離靶標點很遠,給刺點帶來了很大難度。怎樣解…

Failed:(13: Permission denied)導致訪問瀏覽器出現Nginx 500 Internal Server Error

1 、問題 我在部署nginx反向代理服務器的時候&#xff0c;nginx.conf文件都配置好了&#xff0c;但是我在瀏覽器里面輸入域名的時候&#xff0c;提示Nginx 500 Internal Server Error 2、分析 我們需要找到nginx輸出錯誤日志的文件&#xff0c;在nginx.conf里面我們可以看到錯…

MAUI與Blazor共享一套UI,媲美Flutter,實現Windows、macOS、Android、iOS、Web通用UI

1. 前言距離上次發《MAUI初體驗&#xff1a;爽》一文已經過去2個月了&#xff0c;本計劃是下半年或者明年再研究MAUI的&#xff0c;現在計劃提前啦&#xff0c;因為我覺得MAUI Blazor挺有意思的&#xff1a;在Android、iOS、macOS、Windows之間共享UI&#xff0c;一處UI增加或者…

dns 報文格式

最近學習了下DNS的格式&#xff0c;發現很多內容都是轉載自同一個而且說的不是很清楚&#xff0c;特再整理下具體可以查看RFC1035 http://www.ietf.org/rfc/rfc1035.txt有詳細的解釋對于英語理解不是很好和懶得看這么長的可以看下本文首先是DNS數據幀的格式-------------------…

input file實現批量上傳

1、需求實現word批量上傳。 2、使用插件jquery-form.js 3、html代碼 注意 multiple"multiple" 1 <form id"frm_upload" method"post" enctype"multipart/form-data"> 2   <input type"file" id"filepath&qu…

【Pix4d精品教程】Pix4d修編正射影像DOM的兩種方法案例詳解

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) DOM修編前: DOM修編后: 文章摘要: Pix4d內業數據處理通常會生成點云、DSM和DOM等產品,DSM經過精編可以生成精準的DEM,而DOM一般情況下,存在比如房屋邊緣被拉花,或者存在噪點的情況

刪除Linux下/tmp目錄引起的不正常登錄系統

現象&#xff1a;/tmp占用400M的空間(里面全部是亂七八糟的東西) 動作&#xff1a;刪除/tmp目錄 后果&#xff1a;造成只能啟動到控制臺模式 應急&#xff1a; 1 創建目錄&#xff1a;#mkdir /tmp 結果系統在控制臺模式登錄和X windows模式登錄狀態間反復切換&#xff0c;不能進…

C語言試題八十五之狼追兔子問題

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 一只兔子躲…

[轉]快速使用FileProvider解決Android7.0文件權限問題

升級到Android7.0之后&#xff0c;啟動系統相機或者截圖&#xff0c;傳入URI的時候可能會導致程序閃退崩潰。這是因為7.0的新的文件權限導致的。下面是解決這個問題的快速解決方案。 問題代碼 在7.0可能會出問題的代碼&#xff1a; final String CACHE_IMG Environment.getExt…

終于找到了,開源的Vue3+.NET6通用管理后臺!

據說80%的.NET項目都是管理后臺&#xff0c;然而能用上Vue3.NET6的管理后臺并不多見。這里分享一套Vue3 Axios TS Vite ElementUI Plus .NET 6 WebAPI JWT SqlSugar的前后端分離架構的通用管理后臺源碼數據庫腳本&#xff0c;還有與之配套錄制的一組視頻教程&#xff0c;全部打…

【Pix4d精品教程】Pix4d模型成果導出OSGB并加載OSGB到EPS進行三維測圖完美案例教程

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) 在垂直攝影中,Pix4d也可以生成漂亮的三維模型,并導出為OSGB,加載到EPS進行三維測圖。首先來看生成的三維格網紋理和EPS三維模型加載效果。 Pix4d生成的三維格網紋理: EPS加載OSGB模型效果: 文…

Vim 批量替換

假設在非Win系統下。 想批量替換文本不再是Ctrl&#xff0b;F那么簡單了&#xff0c; 一般用Vim來做批量替換&#xff0c; 略微復雜點&#xff1a; 比如將192.168.0.1替換為192.168.0.2 :%s/192.168.0.1/192.168.0.2/g

Android實現ListView(1)

昨天有個朋友問我Android ListView列表視圖&#xff0c;遇到了點錯誤&#xff0c;今天我給大家演示&#xff0c;具體實現見圖&#xff1a; 1&#xff1a;創建一個item布局layout/item.xml 2&#xff1a;創建一個ListViewActivity類&#xff0c;但是必須繼承ListActivity&#x…

WolframAlpha 的使用

WolframAlpha 1. 求解復雜方程組 ab?4abc2ac1直接點開網站&#xff0c;在輸入框中輸入&#xff0c;ab-4;abc2;ac1;&#xff08;逗號分割開來&#xff09;&#xff0c; 轉載于:https://www.cnblogs.com/mtcnn/p/9423087.html

C語言試題八十六之兔子生兔子問題

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 假設一對兔…

聊聊 C# 中的 Composite 模式

?寫在前面 Composite組合模式屬于設計模式中比較熱門的一個&#xff0c;相信大家對它一定不像對訪問者模式那么陌生&#xff0c;畢竟誰又沒有遇到過樹形結構呢。不過所謂溫故而知新&#xff0c;我們還是從一個例子出發&#xff0c;起底一下這個模式吧。一個簡單例子 設想我們…

140種Python標準庫、第三方庫和外部工具都有了

導讀&#xff1a;Python數據工具箱涵蓋從數據源到數據可視化的完整流程中涉及到的常用庫、函數和外部工具。其中既有Python內置函數和標準庫&#xff0c;又有第三方庫和工具。 這些庫可用于文件讀寫、網絡抓取和解析、數據連接、數清洗轉換、數據計算和統計分析、圖像和視頻處理…

【CC精品教程】任務一:CC新建工程、添加照片、相機參數設置、選擇坐標系統

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho) 同Pix4d一樣,CC(Context Capture),也稱Smart 3D,也是無人機航測中人手必備的一款軟件,在空三運算,三維模型構建等傾斜攝影測量方面有很大的優勢,精度也相當高。本CC系列精品教程從項目的角…

C語言試題八十七之實現選擇排序算法

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 C語言選擇排…