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

在接口中声明常量和在java类中声明常量有什么区别,java,Java,1) 代码下面的两个静态变量之间的区别是什么 Class A{ public static final String X = "XYZ"; } interface A{ String X = "XYZ"; } 2) 如果两个静态变量声明相同,那么哪一个是有效的 即 或 就所创建的字段类型而言,没有区别。这两种方法都会创建一个常量字段 效率上的差异可以忽略不计(如果有的话)。说到效率,您应该更加关注网络延迟等问题。这将对您的应用程序产生1000万倍的影响,这可能是保守的。对于这些琐碎的事情

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

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


interface A{
String X = "XYZ";
}
2) 如果两个静态变量声明相同,那么哪一个是有效的

  • 就所创建的字段类型而言,没有区别。这两种方法都会创建一个常量字段
  • 效率上的差异可以忽略不计(如果有的话)。说到效率,您应该更加关注网络延迟等问题。这将对您的应用程序产生1000万倍的影响,这可能是保守的。对于这些琐碎的事情,可读性远比效率重要,所以尽可能做到最清晰
  • 1) 这两个常量具有相同的含义。默认情况下,接口中声明的字段为
    公共静态最终值

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


    3) 效率不会受到放置常数的位置的影响;在类中或接口中。

    特殊性是接口中定义的所有变量都是
    公共的
    最终的

  • 两个字段之间没有区别。发件人:

    接口主体中的每个字段声明都是隐式公开、静态和最终的。允许为此类字段冗余指定任何或所有这些修饰符

  • 性能没有差别,因为在这两种情况下,编译器无论如何都会“内联”字段值:在执行时,它无论如何都不会访问字段。这只是因为您使用的是
    String
    ;如果字段不是基元类型或
    字符串
    ,则代码将访问该字段。。。但我不认为这会对性能产生重大影响,你也不必担心。编写最清晰的代码

  • 在性能上没有差别
  • 这更多的是设计决策,而不是性能导向
  • 我选择声明常量的顺序如下:
  • a。枚举
    B接口
    C课程


    我记得在《有效Java》一书中简要讨论了这个问题。

    是的,我测试了它,但我需要澄清一个疑问,我认为问题是哪一个更有用。因为通过在接口中声明它,可以提高变量的可见性。我完全依赖于需求,因为类中的常量不必是公共的,但在接口中它们是公共的。。。这并没有解决这个问题。如果(假设)您可以在
    接口
    中声明非(隐式)公共和最终的变量,那将是一件坏事。1) 接口的设计使得任何访问接口的东西都可以访问其成员。非公职人员对此表示反驳。2) 接口中的非静态字段实际上等同于实现它的每个类中的公共字段。这是一个糟糕的设计,原因有很多。
    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);
        }
        }
    
    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
        }
    }