从Java代码返回值

Mon*_*eet 19 java unix shell scripting ksh

有一个Java类,它创建一个POST请求并将其发送到servlet.类文件(test)的主要方法如下所示:

public static void main(String[] args) throws IOException {
  // Code logic goes here...
  // No return Statement
}
Run Code Online (Sandbox Code Playgroud)

这是从KornShell(ksh)脚本中调用的,如下所示:

retcode=`$CLK_JAVA_PATH -cp $CLASSPATH test ${PASSWORD} ${HOSTNAME} ${TOOLSET}`

if [ $? != "0" ];then
        echo "ERROR:  
        echo "${retcode}"
else
        echo "${SCRIPT} Success"
fi
Run Code Online (Sandbox Code Playgroud)

retcode如果代码失败或成功,则始终具有值"2".我的问题是,因为我的main方法的返回类型是"void",为什么代码返回一些值?

Joa*_*uer 42

Java应用程序的返回值不是它的main方法的返回值,因为Java应用程序不一定在它的main方法完成执行时结束.

相反,当没有更多非守护程序线程正在运行或何时System.exit()被调用时,JVM结束.

并且System.exit()也是指定返回值的唯一方法:传递给的参数System.exit()将用作大多数操作系统上JVM进程的返回值.

所以main()用这个结束你的方法:

System.exit(0);
Run Code Online (Sandbox Code Playgroud)

将确保两件事:

  • main到达目的地时,您的Java应用程序确实退出了
  • JVM进程的返回值为0

  • 这应该是公认的答案,因为它对内部运作有更好的解释. (2认同)
  • 还值得注意的是,由于在 `try` 或 `catch` 子句中放置了 `System.exit()`,`finally` 块将 ** 不** 被执行——因此如果需要执行一些清理 - up 代码,应该考虑到这一点。 (2认同)

Jes*_*per 17

Java程序不会通过返回一个值将退出代码返回给操作系统main,如在C和C++中所做的那样.您可以通过调用退出程序并指定退出代码System.exit(code);,例如:

// Returns exit code 2 to the operating system
System.exit(2);
Run Code Online (Sandbox Code Playgroud)


Jac*_*cob 5

System.exit(0);
Run Code Online (Sandbox Code Playgroud)

这将返回错误代码0(一切都很顺利). System.exit Doc