2011-07-21 101 views
17

有一个Java类创建一个POST请求并将它发送给一个servlet。 类文件(测试)的主要方法看起来是这样的:Java代码的返回值

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

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

retcode的值总是“:

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

这是从一个KornShell(KSH)脚本是这样的所谓2“独立于代码是否失败或成功。 我的问题是因为我的主要方法的返回类型是“无效”,为什么代码返回一些值?

回答

17

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

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

使用

System.exit(someNumber); 

这会给在由OS看到的返回值您的应用程序的控制。

34

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

取而代之,当不再有非守护进程线程正在运行或调用System.exit()时,JVM结束。

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

所以结束你main()方法与此:

System.exit(0); 

将确保两两件事:

  • 达到的main结束的时候,你的Java应用程序真正退出和
  • ,返回JVM进程的值为0
+1

这应该是公认的答案,因为它对内部工作有更好的解释。 – searchengine27

2

您的程序总是退出后返回返回码。在普通程序中,如果您未指定返回码,它将返回(这包括将返回类型设置为void)。

然而,Java很喜欢特别! Java不会返回您在Main方法返回的返回码,但是当JVM退出时(这会占用多线程程序)它将返回一些返回码,并返回调用指定的内容。

1

你没有得到退出状态,这就是$?包含的状态。无论是写给System.out,你都会达到标准。