繁体   English   中英

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

[英]what is the difference between declaring constant in an interface and in class java

1)下面的两个静态变量有什么区别?

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


interface A{
String X = "XYZ";
}

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

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

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

要么

interface B {
String X = "XYZ";
}


 Class A implements B{

    void print(){
    System.Out.Println(X);
    }
    }
  1. 字段之间没有区别。 JLS的9.3节开始

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

  2. 性能没有差异,因为在两种情况下,编译器都将“内联”字段值:在执行时,它将始终无法访问字段。 只是因为您使用的是String 如果该字段是除原始类型或String之外的其他类型,则代码访问该字段...但是我不希望这会对性能产生重大影响,因此您不必为此担心。 写出最清晰的代码即可。

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)效率不会受到放置常量的位置的影响; 在类或接口中。

  1. 就创建的字段而言,没有任何区别。 两种方式都会创建一个常量字段。
  2. 效率的差异可以忽略不计,如果有的话。 当涉及到效率时,您应该更多地关注网络延迟等。 这将对您的应用程序造成1000万倍的影响,这可能是保守的。 对于这些琐碎的事情,可读性远比效率重要,所以做任何最清晰的事情。

俗称的是,接口中定义的所有变量都是public final变量,无需特别说明。

  1. 性能没有差异。
  2. 这更多是一个设计决策,而不是性能导向。
  3. 我选择声明常量的顺序是:

一种。 枚举
b。 接口
C。 班级

我记得在“有效Java”一书中对此问题进行了简要讨论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM