我有一个问题,为什么主要方法标记为公开?
根据stackoverflow的答案,它被声明为静态
“该方法是静态的,否则会出现歧义:应该调用哪个构造函数?”
但是,任何人都可以解释为什么它总是声明公开吗?
答案 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方法来运行项目范围之外的方法,因此访问说明符必须是公共的,以允许从应用程序之外的任何地方进行调用。
答案 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