对于具有类似C语法的语言,我们声明main()方法返回int或float值(或void)。是否可以在Java中从main()声明非void返回类型?如果没有,那么为什么不呢?这是否意味着Java程序不会向操作系统返回任何值?
答案 0 :(得分:68)
main()
方法确实必须具有void
返回类型。来自Java Language Specification“执行 - 虚拟机启动”(§12.1.4):
必须声明方法
main
public
,static
和void
。它必须 接受一个单一的参数 字符串数组。
继续描述程序何时退出“执行 - 程序退出”(§12.8):
程序终止其所有活动 当两件事之一时,退出 发生:
- 所有不是的线程 守护程序线程终止。
- 一些线程 调用类的
exit
方法Runtime
或类System
和退出 操作不是被禁止的 安全经理。
换句话说,程序可以在main
方法完成之前或之后退出;因此main
的返回值将毫无意义。
如果您希望程序返回状态代码,请调用以下方法之一(请注意,所有三种方法都不会正常返回):
System.exit(int status)
- 相当于Runtime.getRuntime().exit(status)
Runtime.exit(int status)
- 通过启动其关闭序列(运行所有已注册的shutdown hooks和uninvoked finalizers,如果需要)终止当前运行的JVM。完成此操作后,JVM将停止。Runtime.halt(int status)
- 强制终止当前运行的JVM。在这三个中,System.exit()
是终止JVM的传统且最方便的方法。
答案 1 :(得分:27)
This是关于velocityreviews
关于同一主题的有趣讨论:
突出显示:
顺便说一下,这在C和C ++中被认为是坏的风格只是因为 这是主要的错误的签名,不是出于任何普遍原因 独立于编程语言。这是其中之一 不是真的应该工作,但可能在你的实施上。
在Java中,main返回void的原因是线程。 C和C ++都是 在多线程之前被设计为语言是众所周知的 技术,两者都在以后嫁接到它们上面。 Java的 从一开始就被设计成一个多线程环境,并且 坦率地说,编写任何非平凡的Java应用程序都是不寻常的 不使用多个线程。所以程序移动的想法 从主要的开头到结尾的线性有点过时。
写的
www.designacourse.com 培养任何人的最简单方法......无处不在。 Chris Smith - 首席软件开发人员/技术培训师 MindIQ公司
答案 2 :(得分:23)
main
方法以void
作为返回类型的原因是,一旦main
完成,它并不一定意味着整个程序已完成。如果main
产生新线程,那么这些线程可以保持程序运行。此时返回类型main
没有多大意义。
例如,这在Swing应用程序中非常常见,其中main
方法通常在Swing线程上启动GUI,然后main
完成......但程序仍在运行。< / p>
答案 3 :(得分:7)
您可以使用System.exit()返回一个int。
返回除整数之外的任何内容都没有多大意义,因为操作系统需要一个整数。如果没有返回任何内容,则默认值为0,表示正常。其他值通常用于表示错误或特殊情况。