为什么java中的main()无效?

62 java

对于具有类似C语法的语言,我们声明main()方法返回int或float值(或void).是否可以在Java中从main()声明非void返回类型?如果没有,那么为什么不呢?这是否意味着Java程序不会向操作系统返回任何值?

Zac*_*ena 68

main()方法必须确实具有void返回类型.来自"执行 - 虚拟机启动"(第12.1.4节)的Java语言规范:

该方法main必须声明 public,staticvoid.它必须接受一个字符串数组的参数.

它继续描述程序何时退出"执行 - 程序退出"(§12.8):

程序会终止其所有活动,并在发生以下两种情况之一时退出:

  • 所有不是守护程序线程的线程都会终止.
  • 某些线程调用exitRuntime或类的方法, System安全管理器不禁止退出操作.

换句话说,程序可以在main方法结束之前或之后退出; main因此,返回值将毫无意义.如果希望程序返回状态代码,请调用以下方法之一(请注意,所有三种方法都不会正常返回):

三者中,System.exit()是终止JVM的传统和最方便的方法.


Nic*_*lai 27

velocityreviews关于同一主题的有趣讨论:

突出:

顺便说一下,这在C和C++中被认为是不好的风格,因为它是main 的错误签名,而不是独立于编程语言的任何普遍原因.这是其中一个不应该起作用的东西,但可能在你的实现上.

在Java中,main返回void的原因是线程.在多线程是一种众所周知的技术之前,C和C++都被设计为语言,并且两者都在以后将线程移植到它们上面.Java从一开始就被设计为一个多线程环境,坦率地说,编写任何不使用多个线程的非平凡Java应用程序是不常见的.因此,程序从主要开始到结束线性移动的想法有点过时了.

写的

www.designacourse.com培训任何人的最简单方法......无处不在.Chris Smith - 首席软件开发人员/技术培训师MindIQ Corporation


Pet*_*aný 23

main方法具有void返回类型的原因是一旦main完成,它不一定意味着整个程序完成.如果main生成新线程,那么这些线程可以保持程序运行.此时的返回类型main没有多大意义.

例如,这在Swing应用程序中非常常见,其中该main方法通常在Swing线程上启动GUI,然后main完成......但程序仍在运行.

  • @Max:不,main()方法无法控制JVM.当JVM启动时,它将运行main()方法,但是当main()完成时,并不意味着JVM终止.JVM继续执行所有线程,直到1)调用Runtime.exit()或者2)所有正常(非守护进程)线程都已死亡.守护程序线程不计入第二个条件.换句话说...如果main()方法产生一些正常的线程,JVM将不会**在main()完成时终止.如果main()不生成任何线程,JVM将终止.如果main()只生成守护进程线程,那么当main()完成时JVM也会终止. (5认同)

sta*_*lue 7

您可以使用System.exit()返回一个int.

返回除整数之外的任何内容都没有多大意义,因为操作系统需要一个整数.如果没有返回任何内容,则默认值为0,表示正常.其他值通常用于指示错误或特殊条件.