为什么在Java中的main()无效?
在C语言语言的情况下,我们声明main()方法返回一个int或float值(或void)。 是否有可能从Java中的main()声明一个非void返回types? 如果没有,那为什么不呢? 这是否意味着Java程序不会向操作系统返回任何值?
main()
方法的确必须有一个void
返回types。 从“执行 – 虚拟机启动”( §12.1.4 )的Java语言规范 :
方法
main
必须声明为public
,static
和void
。 它必须接受一个单一的参数,这是一个string数组。
它继续描述程序在“执行 – 程序退出”( §12.8 )中何时退出:
当两件事情中的一件发生时,程序终止其所有活动并退出 :
- 所有不是守护线程的线程都会终止。
- 某些线程调用
Runtime
类或System
类的exit
方法,安全pipe理器不禁止退出操作。
换句话说,程序可以在main
方法完成之前或之后退出; 因此从main
返回的价值将是没有意义的。 如果您希望程序返回状态码,请调用以下方法之一(请注意,所有三个方法都不会正常返回):
-
System.exit(int status)
– 相当于Runtime.getRuntime().exit(status)
-
Runtime.exit(int status)
– 通过启动closures序列来终止当前正在运行的JVM(运行所有已注册的closures钩子 ,并在必要时运行未取消的终结器 )。 一旦完成,JVM将停止。 -
Runtime.halt(int status)
– 强制终止当前运行的JVM。
其中, System.exit()
是终止JVM的常规和最方便的方法。
关于同一主题的velocityreviews
, 这是一个有趣的讨论:
突出:
顺便说一句,这在C和C ++中被认为是不好的风格,因为它是main的错误签名,而不是独立于编程语言的任何通用原因。 这是不是真的应该工作,但可能会在您的实施。
在Java中,主要返回void的原因是线程。 C和C ++在multithreading是众所周知的技术之前都被devise成语言,并且都在以后将线程嫁接到它们上面。 Java从一开始就被devise成一个multithreading环境,坦率地说,编写不使用多个线程的非平凡的Java应用程序是不寻常的。 所以程序从头到尾线性移动的想法有点过时了。
写的
http://www.designacourse.com任何地方训练任何人的最简单的方法。; Chris Smith – MindIQ公司首席软件开发人员/技术培训师
main
方法void
返回types的原因是,一旦main
完成,并不一定意味着整个程序完成。 如果main
产生新的线程,那么这些线程可以保持程序运行。 main
的返回types在这一点上没什么意义。
例如,这在Swing应用程序中非常常见,其中main
方法通常在Swing线程上启动GUI,然后main
完成…但程序仍在运行。
你可以用System.exit()返回一个int。
返回除了整数以外的任何东西都没有多大意义,因为操作系统期望一个整数。 在没有任何返回的情况下,默认值是0,这意味着OK。 其他值通常用于指示错误或特殊情况。