为什么主要方法被标记为公开?

时间:2013-12-18 19:08:52

标签: java main public

我有一个问题,为什么主要方法标记为公开

根据stackoverflow的答案,它被声明为静态

  
    

“该方法是静态的,否则会出现歧义:应该调用哪个构造函数?”

  

但是,任何人都可以解释为什么它总是声明公开吗?

9 个答案:

答案 0 :(得分:12)

因为JLS, Section 12.1.4,所以说:

  

方法main必须声明为public,static和void。它必须指定一个形式参数(第8.4.1节),其声明的类型是String数组。

如果不是public,则无法找到;你会得到

Error: Main method not found in class Main, please define the main method as:
   public static void main(String[] args)

答案 1 :(得分:6)

启动程序的初始化软件必须能够看到main以便它可以调用它。

答案 2 :(得分:6)

我相信,将公共主体强制执行的理性更多地与语言规范有关 - 而不是是否可以实现某些目标。

参见: http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.1.4

  

方法main必须声明为public,static和void。它必须   指定一个形式参数(第8.4.1节),其声明的类型是数组   串。因此,可以接受以下任一声明:

Java使用JNI启动java应用程序在调用私有main时永远不会有任何问题 - 但这更像是jail-brake(就像另一个jail-brake,其中反射API让你访问私有方法)并且绝对不是精神上的java规范。


如果我记得JDK 1.3,那么从开发人员的角度来看并不是强制性的。即使是私人主要也被JRE接受。但是,它不符合JLS 1.3。

我尝试搜索JLS 1.3以获取参考,但无法获得链接。但我发现它被全世界的开发人员报告为一个错误:

请参阅:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4155575

因此,在后续版本中修复了JLS规定的规则。

现在,重点是JLS编写者在第一时间执行此规则的原因 - 我真的不知道。我唯一能想到的是 - 让开发人员保持“明显”和不混淆。

答案 3 :(得分:1)

因为这就是所谓的“入口点”,如果它是私有的,那么您的程序将无法运行。

答案 4 :(得分:0)

Public - JVM调用main方法来运行项目范围之外的方法,因此访问说明符必须是公共的,以允许从应用程序之外的任何地方进行调用。

来自coderanch

答案 5 :(得分:0)

执行代码时,将创建一个JVM,它将充当我们尝试执行的代码的容器。将此方法声明为public将允许JVM启动代码执行。如果方法是私有的,JVM将无法调用它。 有一些方法可以调用私有方法(例如使用Reflection),但这不是一种标准的方法。

答案 6 :(得分:0)

在Java中,类中的函数或变量在不可访问的情况下直到从类创建一个Object,但'main'函数应该在启动时运行(没有Object启动) JVM 即可。因此,'main'被声明为 public 以及 static ,因此可以在课堂和课堂之外访问它。甚至没有创建对象。

答案 7 :(得分:-1)

是的,标准是这样的,main方法应该是Java中的public。但它不仅适用于Java。但即使对于C#,main也必须为public

所以在现实世界的场景中考虑一下。

E.g。你想进入你的房间,但你应该先进入你家的大门(房间里面有房间......没有别的办法进入房子)

大门是唯一可公开访问的接入点。

答案 8 :(得分:-2)

因为JVM应该访问main方法而不受任何限制。我想你可以在这里找到更多信息:Why main method is public