2012-04-24 44 views
34

每次我用Java編寫方法的關鍵字多於public void時,我每次用另一種方式寫它。有時「static public void」有時「public static void」等Java中的修飾符關鍵字順序

這些關鍵字的最佳順序(最佳實踐)是什麼?

[abstract/static] [final] [​​] [public/private/protected] [result_type] ???

+0

聽起來好像得到了引導到http我的一個問題://programmers.stackexchange.com/...但是個人我使用'[public/private/protected] [final/abstract/static] [synchronized] [type] func()'... – 2012-04-24 13:41:30

回答

2

最好的順序是其餘代碼使用的順序。

+4

是的,但是你不能否認'public static final'比'公共最終靜態「。有一些不成文的慣例。 – 2012-04-24 13:43:30

+0

的確,在Javaland中有一些非常明確的約定,例如使用infixCaps風格的命名方法。值得學習,並遵循它們。 – ewernli 2012-04-24 13:53:38

1

像這樣:

public static final synchronized void calculate()

+0

'公共靜態最終同步無效計算()';-) – Betlista 2012-04-24 13:42:20

+0

@Betlista-謝謝,完成:) – 2012-04-24 13:42:51

44

從理論上講,如果你說的公共靜態最終或最終靜態公共不要緊,但是如果按照通常的慣例,其他人也能看懂你的代碼更容易。這裏是首選訂單:

[公共|保護|私人]

靜態

抽象

同步

[瞬時|揮發性]

最終

天然

strictfp

[INT |長|字符串| class |枚舉|接口等]

+1

http://checkstyle.sourceforge.net/config_modifier.html – 2014-09-15 11:52:20

+1

@YoushaAleayoub在提供的JLS部分,它沒有說任何東西關於訂單限制,就像'這是編譯時錯誤,如果你不按照上面的順序。':) – 2014-09-16 08:12:33

+4

我認爲靜態和抽象的順序交換根據http://docs.oracle.com/javase/specs /jls/se7/html/jls-8.html#jls-8.4.3。去編輯它.. – 2015-03-04 20:16:44

0

這是我個人的選擇

public static final void method() { } 
public void method() { } 
public abstract void method() { } 

這也似乎符合Java文檔

3

「最佳」將遵循Java Coding Style Guide,各國在6.2 (方法聲明):

public static final synchronized long methodName() 
    throws ArithmeticException, InterruptedException { 
    static int count; 
} 
+0

鏈接目前沒有指向有用的頁面,只是爲了oracle的java主頁。 – CoatedMoose 2013-03-24 19:44:28

+1

@CoatedMoose固定鏈接 – ewernli 2013-03-25 09:39:10

0

是的,有一個標準的排序。

如果使用IDE,您可以在首選項設置它格式化你的代碼對你來說,也就是在Eclipse - >爪哇 - >編輯 - >保存操作,你可以勾選「格式化源代碼」

然後你不必再擔心它。無論何時保存文件,如果整個項目都使用此項,它將自動完成,那麼對於整個項目而言,代碼的格式都是相同的。

+0

這不會重新排序修飾符AFAIK。 請參閱https://bugs.eclipse.org/bugs/show_bug.cgi?id=322494 – dforce 2017-03-30 08:24:40

1

修飾符的自定義使用順序在Java Language Specification中提到(因此不需要有自己的意見;-))例如,爲method modifiers,你會發現下面的定義(摘錄):

MethodModifiers: 
    MethodModifier 
    MethodModifiers MethodModifier 

MethodModifier: one of 
    Annotation public protected private abstract 
    static final synchronized native strictfp 

如果兩個或多個(不同的)方法修飾符出現在方法聲明中,這是習慣,但並不是必需的,它們出現的順序與MethodModifier生產中上面顯示的一致。

您會在指定使用修飾符的其他幾處找到此句,例如, here用於字段修飾符。

(這主要是從我的另一個答案here複製)。

23

Checkstyle(它實現了Java語言規範部分的建議,8.1.18.3.18.4.3)說:

  1. 公共
  2. 保護
  3. 私人
  4. 抽象
  5. 靜態
  6. final
  7. 短暫
  8. 揮發性
  9. 同步
  10. 本地
  11. strictfp
+0

這一個應該被認爲是正確的答案,因爲這是從JLS推斷的順序。 Checkstyle只是正確地實現了這一點。 – Asturio 2015-12-28 12:21:03

+0

有這個eclipse特性會更好:https://bugs.eclipse.org/bugs/show_bug.cgi?id = 322494 – dforce 2017-03-30 08:25:54