相关疑难解决方法(0)

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

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

java

62
推荐指数
4
解决办法
3万
查看次数

为什么Java规范要求程序的主要方法只是无效?

虽然返回类型不是方法签名的一部分,但JVM会查找精确的声明

 public static void main(String[] args)
Run Code Online (Sandbox Code Playgroud)

我的假设是,由于方法签名没有包含"返回类型",我必须允许更改返回类型.

但是,如果我将其更改为public static int main(String[] args)并返回一个值,假设为0,则JVM无法执行程序并退出并显示错误

Error: Main method must return a value of type void in class TestData, please 
define the main method as:
   public static void main(String[] args)
Run Code Online (Sandbox Code Playgroud)

为什么Java规范要求主方法只是无效?当返回类型不是方法签名的一部分时,为什么会出现此限制?

这个问题与为什么java中的main()不同:这个问题是关闭的,因为它是基于意见的,而我正在寻找JVM调用此方法的代码位置/进程,以及强制它们将此方法保持为空的限制.他们采取了哪些设计决策(以及背后的推理),以及它在哪里记录.

我正在寻找事实,以便知道为什么会这样做.如果不仔细阅读问题的详细信息,请不要将其标记为重复.

PS:退出,是另一回事.我更关心该计划的进入.此外,返回的值可能不是使用JVM,而是将其限制为void可扩展性.

到目前为止,我从这个问题中学到的是:Java规范明确地修复了返回类型,以避免混淆迁移程序员(C/CPP),他们可能期望这个值返回到操作系统,但由于JVM介于此之间,因此该值永远不会返回OS.为了这个特殊目的(返回OS的值),他们提供了System.exit()方法.


对于那些建议返回类型是签名的人 - 只是尝试在类中定义以下两种方法

    public static void main(String[] a){

    }
    public static String main(String[] a){

    }
Run Code Online (Sandbox Code Playgroud)

您将收到编译错误,因为这两种方法的签名是相同的.

java jvm return-type

22
推荐指数
6
解决办法
2409
查看次数

java程序可以结束多少种方式?

我知道使用System.exit(0)可以结束一个java程序,例如,如果我有一个JFrame窗口,它将关闭并结束程序,但我想知道有多少其他方法,它可以关闭,程序结束?包括何时发生错误,是否会关闭程序并关闭JFrame?

java

5
推荐指数
1
解决办法
8587
查看次数

标签 统计

java ×3

jvm ×1

return-type ×1