Java 为什么我们可以';是否在接口中的静态块内分配变量?亚奥理事会

Java 为什么我们可以';是否在接口中的静态块内分配变量?亚奥理事会,java,interface,constants,final,static-block,Java,Interface,Constants,Final,Static Block,我已经读到在接口中定义的常量值是隐式公共的、静态的和最终的。如果是这样的话,为什么我们不能在静态块中的接口中分配一个常量值呢。在这里,我们可以在静态块内的类中做同样的事情 接口示例:[抛出错误] interface Test{ int x; static{ x=20; } } 课堂示例:[效果很好] class Test{ public static final int x; static{ x=20; } } 请告诉我这种行为的原

我已经读到在接口中定义的常量值是隐式公共的、静态的和最终的。如果是这样的话,为什么我们不能在静态块中的接口中分配一个常量值呢。在这里,我们可以在静态块内的类中做同样的事情

接口示例:[抛出错误]

interface Test{
   int x;
   static{
     x=20;
   }    
}
课堂示例:[效果很好]

class Test{
  public static final int x;
  static{
     x=20;
  } 
}
请告诉我这种行为的原因?
如果您发现此问题重复,请将其标记,以便我检查。

接口没有初始值设定项。因此,不能使用
静态
或实例块进行初始化。您可以对这些场景使用
abstract
类。

来自:

接口的字段声明中的每个声明符都必须具有变量初始值设定项,否则会发生编译时错误


规范只需要一个初始值设定项。

在一般情况下,接口用于通过实现某个类来定义该类应该具有哪些函数。因此,我不确定在接口内赋值是正确的做法

class Test implements yourInterface {
   @Override
   function myInterfaceFunction() {
     // code goes here
   }
}

也许您可以解释一下您想要实现什么以及为什么需要该接口。

Java语言规范实际上只允许变量初始值设定项

这可能是一个深思熟虑的设计决定。接口被引入,类被限制为单一继承,如C++多继承创建模糊水域;现在用C++解决了,但是代码中不太可读,而且 用处相当有限


在静态初始值设定项中,可以执行所有类型的操作,例如
System.out.println
for
循环。他们可能确实想要超薄的界面。当然不是普通的初始值设定项
{}
(=某种方式的多重继承:计算构造函数的顺序)。也许有人可以告诉我们,在接口中使用静态初始值设定项加载类是否会造成开销。

我正在准备OCA考试,只想澄清一些疑问,以供考试之用。