【问题标题】:Can I use the final access modifier with public static void main(String args[]){ } method in Java? [closed]我可以在 Java 中将 final 访问修饰符与 public static void main(String args[]){ } 方法一起使用吗? [关闭]
【发布时间】:2015-08-13 20:45:02
【问题描述】:
class Test{

    public static final void main(String args[]){

    }

}

在 Java 1.8 中可以与 main() 一起使用的其他访问修饰符有哪些?

【问题讨论】:

  • 你的编译器是怎么说的?
  • 无编译错误
  • 还有哪些可选说明符可以与 Java 中的 main() 方法一起使用?

标签: java main access-modifiers


【解决方案1】:

可以,但是final 与静态方法一起使用时没有意义,因为无论如何都不能覆盖静态方法。

顺便说一下,final 和 static 不是访问修饰符。 Access modifiers 控制允许哪个实体访问方法/字段。

【讨论】:

  • Java 中我们所说的 static、final 关键字?
  • 非访问修饰符:)
【解决方案2】:

final 不会影响该方法,因为它已经被声明为static,因此它不会以任何方式影响程序。这只意味着你不能在子类中隐藏这个方法。

如果你想上课

class Hello2 extends Test {
....
}

您不能在此类中创建public static void main(String args[]) 函数。

【讨论】:

  • static 方法不能被覆盖。
  • 我检查了编译器,当超类方法不是final时,它实际上可以隐藏超类中的方法。你指的是别的东西吗?
  • @Pshemo,为正确性编辑了答案。感谢您注意到它
【解决方案3】:

您可以使用final 修饰符。您只需编译您在问题中提供的程序即可看到这一点。

Java Language Specification 对应用于方法的 final 关键字有这样的说法:

可以将方法声明为 final 以防止子类覆盖或隐藏它。

也就是说,如果方法是实例方法(不是静态的),它可以被覆盖,final 会阻止这种情况。如果一个方法是静态的,它可以被隐藏,final 会阻止它。

【讨论】:

    【解决方案4】:

    static 方法可以final。正如Java Language Specification 8.4.4.3 节中所述,当静态方法是最终方法时,意味着子类不能“隐藏”它,即定义具有相同名称和相同签名的方法。

    因此,您可以在 main 方法上使用 final。该方法将可用作程序的主要入口点。此外,子类或您的主类将无法隐藏它。

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 1970-01-01
      • 2016-05-22
      • 2016-07-14
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      相关资源
      最近更新 更多