有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在接口中声明常量和在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);
}
}

interface B {
String X = "XYZ";
}


 Class A implements B{

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

共 (5) 个答案

  1. # 1 楼答案

    特殊性是,接口中定义的所有变量都是public{},没有特别说明

  2. # 2 楼答案

    1. 在性能上没有差别
    2. 这更多的是设计决策,而不是性能导向
    3. 我选择声明常量的顺序如下:

    a.枚举
    b、 接口
    c、 课程

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

  3. # 3 楼答案

    1. 就所创建的字段类型而言,没有区别。这两种方法都会创建一个常量字段
    2. 效率上的差异可以忽略不计(如果有的话)。说到效率,您应该更加关注网络延迟等问题。这将对您的应用程序产生1000万倍的影响,这可能是保守的。对于这些琐碎的事情,可读性远比效率重要,所以尽可能做到最清晰
  4. # 4 楼答案

    1. 两个字段之间没有区别。从section 9.3 of the JLS

      Every field declaration in the body of an interface is implicitly public, static, and final. It is permitted to redundantly specify any or all of these modifiers for such fields.

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

  5. # 5 楼答案

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