为什么Java中的main方法总是需要公开?

为什么java中的main方法总是需要公开? 如果我们声明具有main方法的类作为默认值,它将成功执行它,但如果我们将main方法声明为默认值,那么JVM将抛出错误。 为什么? 这里

class DefaultTest { public static void main(String[] args) { System.out.println("output........."); } } 

运行成功但是

 class DefaultTest { static void main(String[] args) { System.out.println("output........."); } } 

这不会。 我的意思是如果类本身不是公共的,JVM仍然可以访问main方法,这意味着不需要main来公开。 但是,如果我们不将其声明为公开,则会引发错误。

static以便JVM可以运行该方法而无需实例化类对象+ public以便JVM可以自由访问它而不会出现任何访问​​问题。

它由Java语言规范指定,请参阅http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html第12.1.4节。 调用Test.main

方法main必须声明为public,static和void。

它也是JVM规范所要求的,请参阅@ A4L的答案。

来自jvms

Java虚拟机通过使用引导类加载器(第5.3.1节)创建一个初始类来启动,该类以依赖于实现的方式指定。 然后,Java虚拟机链接初始类,初始化它,并调用公共类方法void main(String []) 。 调用此方法会驱动所有进一步的执行。 构成主方法的Java虚拟机指令的执行可以导致附加类和接口的链接(并因此创建),以及其他方法的调用。

所以它是这样指定的,jvm供应商必须尊重它!

我认为这只是Java语言中的一个规则。
从技术上讲,我没有看到另一个原因(因为即使
它不公开,JVM仍然可以找到并调用它)。

主要方法必须严格遵循其语法; 其他明智的JVM将无法找到它,您的程序将无法运行。

它们是公共的,因为JVM必须可以访问它们才能开始执行程序。如果它不是公共的,那么只有类和包成员可以访问它而JVM不能访问它。

Main是第一个在任何类中执行的方法。 它们是静态的,因为它们必须可以在没有对象实例的情况下执行。

如果没有使用修饰符(例如, public ),则只有类和包可以运行该方法。 这意味着外界无法运行主要方法。 反过来,这就是您需要使用public定义方法的原因。

Java指定了几个访问修饰符,例如private,protected和public。 在Java中声明为public的任何方法或变量都可以从该类的外部访问。 由于main方法在Java中是公共的,因此JVM可以轻松访问和执行它

任何人都可以访问公共类和方法,无论是在包内还是包外。 所以既然jvm我自己在不同包中的类加载器比默认或你的包,你需要把主要的公共访问修饰符

因为main方法是网关,您可以从中访问项目。 如果您将此主要网关设为您的应用程序,则无法访问function。