Java类中方法的静态最终常量的位置

问题描述:

假设我有一个方法使用一些静态最终变量作为常量,但类中没有其他方法使用它们。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

如果你知道一个事实,那关你现在的方法或将来会用这些变量,你可以让他们在方法内部的局部变量。

但是,如果将来有些机会可能会使用某些其他方法(类内或外部类),请将变量公开并将它们置于顶部。

放置不会影响编译,但最好与您定义变量和方法的位置保持一致。

将所有常量放在类的顶部是一种很好的做法。

例如,Sun's Code Convention确定了thisfile组织。