why main method in Java need to be public always?
为什么Java中的主要方法总是需要公开?如果我们声明类的主方法是默认的,它将成功地执行它,但是如果我们声明主方法是默认的,那么JVM将抛出错误。为什么?在这里
1 2 3 4 5
| class DefaultTest {
public static void main (String[] args ) {
System. out. println("output.........");
}
} |
运行成功,但
1 2 3 4 5
| class DefaultTest {
static void main (String[] args ) {
System. out. println("output.........");
}
} |
这不会。我的意思是,如果类本身不是公共的,那么JVM仍然可以访问主方法,这意味着不需要将主方法公开。但是,如果我们不将其声明为公共的,它将抛出一个错误。
- @阿斯利亚斯7天前xd
- 我的意思是,如果类本身不是公共的,那么JVM仍然可以访问主方法,这意味着不需要将主方法公开。但同样,如果我们不公开声明,它将抛出错误。
- 通过JVM从类和包以及其他一些位置或网络之外访问主方法。你可以在这里找到更多的解释:javabynataraj.blogspot.in/2014/05/…
所以JVM可以运行该方法而不需要安装该类物体因此,JVM可以在没有任何问题的情况下自由进入。
- 伙计,如果你读了剩下的,我也提到了。只需试着向询问者提供更多信息。你好像很难阅读:d
- 是K,我也有同样的问题。哈哈。这是我的错,因为我没有一个好的格式。我会修理的。:)
- 如果类本身不是公共的,那么JVM仍然可以访问主方法,这意味着不需要将主方法公开。但同样,如果我们不公开声明,它将抛出错误。
- 这并不能解释主要方法public的原因。
It is specified by the Java language specification,see http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html chapter 12.1.4.Invoke test.Main:
The method main must be declared public, static, and void.
It is also required by the JVM specification,see the answer from@a4l.
- 虽然这个答案是正确的,但它与"必须是public"相同,因为它必须是公开的(因为jls这样说)。如果你补充一下如果我们让main不做public会发生什么样的坏情况,那就太好了。
- 从技术上讲,没有理由——您可以实现一个甚至可以启动私有方法的JVM启动程序。
从JVMS
BLCK1/
所以这是一种特殊的方式,JVM销售商必须尊重它!
我认为这只是爪哇语言中的一条规则。技术上,我看不到另一个原因这不是公开的JVM仍然能找到它,叫它。
- 我认为A4L和Andreas的回答支持我的观点。这只是JLS规定的惯例,并非严格的必要性。但是,是的,如果允许非公开的主要方法,那将是丑陋和不合逻辑的。
- 确切地说——不幸的是,我没有官方的资料来证明这一点,但我认为这正是语言设计者所想的。所以,imho唯一可以证明的答案是:jls指定了它,所以实现者必须遵循它……
主要方法是严格遵循它的语法;其他的JVM无法定位它,而您的程序不会运行。
他们是公开的,因为他们必须能够进入JVM,以便开始执行该方案。如果该方案不是公开的,那么该方案的成员只能进入该方案,而JVM不能进入该方案。
主要是在任何一类中执行的第一种方法。它们是静态的,因为它们必须能够在没有客观诉讼的情况下执行。
因为主要方法是网关,从你的项目可以进入的地方。如果你让这个主要的网关在您的应用中被私人使用,那么功能性的可获得性是不可能的。
在包内或包外的任何人都可以进入公共类别和方法。因此,自从JVM IYSELF在不同的包装中负荷超过了缺陷或你的包装,你就需要用公共存取修改
Java specifies several access modifiders e.g.private,protected and public.在爪哇公开宣布的任何方法或变量都可以从这一类的外部进入。因为主要方法是公开的爪哇,JVM可以容易地接入和执行它。
如果没有修改(E.G.,EDOCX1&0),则只使用类别,而包装可以运行该方法。这意味着外面的世界无法运用主要的方法。这就是为什么你需要用public来确定方法。
- 问题是通常JVM运行这个方法。所以…这不只是一条规则吗?技术上需要吗?
- @彼得彼得罗夫关于能见度的一切都是"规则"。在这个特定的情况下,因为不是其他的Java代码运行EDCOX1的0度,这不是真正必要的,但从概念上讲,每个人都可以运行它。
- @Darkhogg Well,"从概念上讲,它清楚地表明每个人都可以运行它",从概念上来说——是的,但从技术上讲,我看不出它公开的原因。我以为这就是手术室的要求。
- @我不会这么说的。我的意思是,如果要从Java代码调用,那么OK,它必须是公开的。但正如它在JVM中所说的那样,我不知道公众是多么的必要。你明白我的意思了。
- @从技术上讲,彼得罗夫也没有理由被称为main。事实上,如果使用小程序,则不会定义main方法。这只是一个惯例。
- @是的,对,我们在同一页。
- 如果类不是公共的,那么JVM仍然可以访问主方法,这意味着不需要将主方法公开。但同样,如果我们不公开声明,它将抛出错误。