从Java代码返回值

时间:2011-07-21 12:10:42

标签: java shell unix scripting ksh

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

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

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

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

if [ $? != "0" ];then
        echo "ERROR:  
        echo "${retcode}"
else
        echo "${SCRIPT} Success"
fi

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

6 个答案:

答案 0 :(得分:40)

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

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

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

结束你的main()方法:

System.exit(0);

将确保两件事:

  • 当到达main的末尾并且
  • 时,您的Java应用程序确实退出
  • JVM进程的返回值为0

答案 1 :(得分:17)

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

// Returns exit code 2 to the operating system
System.exit(2);

答案 2 :(得分:5)

System.exit(0);

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

答案 3 :(得分:4)

使用

System.exit( someNumber );

这将使您的应用程序控制操作系统看到的返回值。

答案 4 :(得分:3)

您的程序始终会在退出后返回返回代码。在普通程序中,如果您没有指定返回代码,它将返回(这包括将返回类型设置为void)。

但是,Java喜欢特别的! Java不会返回您在Main方法返回的返回代码,但它会在JVM退出时返回一些返回代码(这说明多线程程序),并返回System.Exit(returnCode);调用指定的内容。

答案 5 :(得分:1)

您没有获得退出状态,这是$?包含的内容。无论写入System.out是什么,你都会标准化。