当前位置: 首页 > 面试题库 >

Java接口中的常量的“公共静态最终”是否多余?

颛孙成益
2023-03-14
问题内容

这段代码:

interface Config {
    int MAX_CONN = 20;
}

编译并按预期工作。看起来这与以下内容相同:

interface Config {
    public static final int MAX_CONN = 20;
}

Java接口中的常量的“公共静态最终”是否多余?Java 1.1、1.2、1.3、1.4,…,1.8是否适用于Java,或者在Java版本中已更改?


问题答案:

在Interface中声明的变量是隐式的public static final。这就是JLS
9.3
所说的:

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

通读JLS以了解执行此操作的原因。

看看这个SO答案:

接口变量是静态的,因为不能单独实例化Java接口。必须在没有实例的静态上下文中分配变量的值。final修饰符确保分配给接口变量的值是一个真正的常量,不能由程序代码重新分配。



 类似资料:
  • 问题内容: 给定下面的Java代码,您可以在Ruby类中最接近地表示这两个变量吗?而且,在Ruby中是否可以像Java中那样区分和变量? 问题答案: Ruby中确实没有等效的构造。 但是,您似乎犯了一个经典的移植错误:您有一种使用语言A 的 解决方案 ,然后尝试将其翻译为语言B,这时您真正应该做的就是找出 问题 ,然后找出解决方法使用语言B。 我不能完全确定您要从那个小的代码段中解决什么问题,但是

  • 我最近和一个朋友讨论了枚举和公共静态最终常量。我告诉他公共静态最终常量比枚举更容易维护,有时更快(Android开发者文档证实了这一点),也更方便。我还说当你使用枚举时,你也会失去功能: 不能扩展枚举 然后他说,如果需要实例化或扩展枚举,就不应该使用枚举。然后我回答说,这就是为什么我们应该只使用常量,因为它更易于维护;如果在项目中期我们需要实例化一个枚举或扩展它呢?那我们就必须改变一切。 我举了一

  • 问题内容: 我碰巧在工作场所遇到了Java代码。这是场景:有2个类- 和。 除了4个公共静态最终字符串值外,没有任何内容。它的目的是使用类似的值(不要问我为什么,这不是我的代码)。 进口。我在其中编辑了字符串值并对其进行了编译。当我运行时,我可以看到它正在使用旧值- 而不是新值。我不得不重新编译以使其使用来自的新值!(我不得不重新编译其他导入的类!) 这是仅因为JDK 1.6还是我早就应该知道重新

  • 我有一个抽象类的许多子类,每个子类都声明了一个同名的公共静态final字段。我在考虑在抽象超类中包含这个字段,而不初始化它,并希望每个子类都能被强制初始化它。 我之所以这么想,是因为抽象类的所有子类都声明了一个名为UNIQUE_ID的公共静态最终字符串字段,并且每个子类都有必要声明一个具有该名称的字段。 我希望我的问题足够清楚,如果不清楚,请告诉我。 能不能做一些和这个差不多的事情? 编辑:添加代

  • 问题内容: [已更新,对更改感到抱歉,但现在是真正的问题] 对于getCanonicalPath()方法中的异常,我无法在其中包括try-catch- loop。我试图通过方法来解决问题,然后在其中声明值。问题是它是最终版本,我无法更改。因此,如何将startingPath作为“ public staticfinal”。 问题答案: 这个名字很好。您忘记声明类型了。 解决这个问题,您当然会意识到如

  • 问题内容: 我一直想知道Java中的单例。按照惯例,单例设置如下: 最近,我切换到使用以下内容: 由于没有空检查,因此它更短,更快捷,而且打字对我来说比打字好。有什么理由不能使第二种方法成为主流呢? 问题答案: 第一个版本在第一次实际需要时创建实例,而第二个版本(较短的版本)在初始化类后立即运行构造函数 类或接口类型T将在以下任何一种首次出现之前立即初始化: T是一个类,并创建T的实例。 T是一个