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

时间:2009-02-12 07:50:56

标签: java

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

4 个答案:

答案 0 :(得分:68)

main()方法确实必须具有void返回类型。来自Java Language Specification“执行 - 虚拟机启动”(§12.1.4):

  

必须声明方法main   publicstatic void 。它必须   接受一个单一的参数   字符串数组。

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

  

程序终止其所有活动   当两件事之一时,退出   发生:

     
      
  • 所有不是的线程   守护程序线程终止。
  •   
  • 一些线程   调用类的exit方法   Runtime或类System和退出   操作不是被禁止的   安全经理。
  •   

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

在这三个中,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,表示正常。其他值通常用于表示错误或特殊情况。