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

时间:2013-12-25 20:15:16

标签: java

为什么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来公开。但是,如果我们不将其声明为公开,则会引发错误。

9 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:10)

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

  

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

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

答案 2 :(得分:9)

来自jvms

  

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

所以它以这种方式指定,jvm供应商必须尊重它!

答案 3 :(得分:5)

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

Java指定了几个访问修饰符,例如私人,受保护和公共。可以从该类外部访问在Java中声明为public的任何方法或变量。由于主要方法是公开的 Java,JVM可以轻松访问和执行它

答案 7 :(得分:0)

任何人都可以访问公共类和方法,无论是在包内还是包外。因此,由于jvm我自己在不同包中的类加载器而不是默认或你的包,你需要将main设置为公共访问修饰符

答案 8 :(得分:0)

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