在接口中声明常量和在java类中声明常量有什么区别
1) 代码下面的两个静态变量之间的区别是什么在接口中声明常量和在java类中声明常量有什么区别,java,Java,1) 代码下面的两个静态变量之间的区别是什么 Class A{ public static final String X = "XYZ"; } interface A{ String X = "XYZ"; } 2) 如果两个静态变量声明相同,那么哪一个是有效的 即 或 就所创建的字段类型而言,没有区别。这两种方法都会创建一个常量字段 效率上的差异可以忽略不计(如果有的话)。说到效率,您应该更加关注网络延迟等问题。这将对您的应用程序产生1000万倍的影响,这可能是保守的。对于这些琐碎的事情
Class A{
public static final String X = "XYZ";
}
interface A{
String X = "XYZ";
}
2) 如果两个静态变量声明相同,那么哪一个是有效的
即
或
公共静态最终值
2) 不应首选接口中的字段。(除非您非常确信另一个接口不会有同名字段)
3) 效率不会受到放置常数的位置的影响;在类中或接口中。特殊性是接口中定义的所有变量都是
公共的
最终的
String
;如果字段不是基元类型或字符串
,则代码将访问该字段。。。但我不认为这会对性能产生重大影响,你也不必担心。编写最清晰的代码
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
}
}