2015-11-06 37 views
0

假設我有一個方法使用一些靜態最終變量作爲常量,但類中沒有其他方法使用它們。Java類中方法的靜態最終常量的位置

例如,與使用這些常量來描述旋轉

private static final int L_HEAVY = 2; 
private static final int LL_HEAVY = 1; 
private static final int R_HEAVY = -2; 
private static final int RR_HEAVY = -1; 

平衡因素,這是哪裏最好根據Java編碼規範(例如,Oracle的代碼約定將這些常量的平衡方法的AVLTree類)?

public class AVLTree { 
    private Node root; 
    // (1) Here, among members, right after class declaration ? 

    public AVLTree() { 
     root = null; 
    }  

    ... 

    // (2) Here, just above the method that uses them? 

    private Node balance(Node node) { 
     // (3) Here, inside the method that uses them? 

     if (height(node.left) - height(node.right) == L_HEAVY) { 
      if (height(node.left.left) - height(node.left.right) == LL_HEAVY) { 
       ... 
      } 
     } 

     if (height(node.left) - height(node.right) == R_HEAVY) { 
      if (height(node.right.left) - height(node.right.right) == RR_HEAVY) { 
       ... 
      } 
     } 

     return node;  
    } 

    ... 
} 
+1

我認爲它會編譯到同樣的事情。這是你的偏好。有了IDE,我不確定它有多重要。但是我會把它放在頂端的風格明智的 – dkatzel

+1

如果他們沒有目的/含義的方法之外,然後把它們放在方法中,編譯器可能會完全消除它們。如果他們可能在方法外有目的,即使只使用該方法,然後將它們放在前面*,放在*實例字段之前。儘管編譯器可能仍然內聯它們,所以一旦編譯它們就沒有使用,它們仍然是類定義的一部分,並且可以通過反射來看,所以它們確實有(非常小的)影響。 – Andreas

回答

3

如果你知道一個事實,那關你現在的方法或將來會用這些變量,你可以讓他們在方法內部的局部變量。

但是,如果將來有些機會可能會使用某些其他方法(類內或外部類),請將變量公開並將它們置於頂部。

放置不會影響編譯,但最好與您定義變量和方法的位置保持一致。

2

將所有常量放在類的頂部是一種很好的做法。

例如,Sun's Code Convention確定了thisfile組織。