在接口和类java中声明常量之间有什么区别

时间:2013-01-28 06:52:44

标签: java

1)代码下面的两个静态变量之间有什么区别。

Class A{
public static final String  X = "XYZ";
}


interface A{
String X = "XYZ";
}

2)如果两个静态变量声明都相同,那么哪个是有效的。

Class A{
public static final String  X = "XYZ";

void print(){
System.Out.Println(X);
}
}

OR

interface B {
String X = "XYZ";
}


 Class A implements B{

    void print(){
    System.Out.Println(X);
    }
    }

5 个答案:

答案 0 :(得分:5)

  1. 字段之间没有区别。来自section 9.3 of the JLS

      

    接口主体中的每个字段声明都是隐式的public,static和final。允许为这些字段冗余地指定任何或所有这些修饰符。

  2. 性能没有区别,因为在这两种情况下,编译器都会“内联”字段值:在执行时,它无论如何都不会访问字段。这只是因为你使用String;如果该字段是基本类型或String以外的类型,则代码访问该字段...但我不希望它具有 signficant < / em>对性能的影响,你不应该担心它。写下最清晰的代码。

答案 1 :(得分:1)

1)两个常数具有相同的含义。默认情况下,接口中声明的字段为public static final

2)不应首选接口中的字段。 (除非您非常确信另一个界面不具有相同名称的字段)。

interface A
{
    String X = "XYZ";
}

interface B
{
    String X = "ABC";
}

class C implements A, B
{
    public static void main(String[] args)
    {
        System.out.println(X); // Ambigous X
    }
}

3)效率不会受到恒定位置的影响;在课堂上或界面中。

答案 2 :(得分:0)

  1. 就创建的字段类型而言,没有区别。两种方式都可以创建一个常量字段。
  2. 效率差异可以忽略不计,如果有的话。在效率方面,您应该更关注网络延迟等。这将影响你的应用程序1000万倍,这可能是保守的。对于这些微不足道的事情,可读性远比效率更重要,所以做最清楚的事情。

答案 3 :(得分:0)

特性是接口中定义的 ALL 变量是public final,没有特别说明。

答案 4 :(得分:0)

  1. 表现没有差异。
  2. 这更像是一个设计决策,而不是以绩效为导向。
  3. 我声明常量的选择将按顺序进行:
  4. 一个。 Enum
    湾界面
    C。课程

    我记得在“Effective Java”一书中简要讨论了这个问题。