【问题标题】:Return value from a Java code从 Java 代码返回值
【发布时间】:2011-10-10 04:29:58
【问题描述】:

有一个 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”,为什么代码会返回一些值?

【问题讨论】:

    标签: java shell unix scripting ksh


    【解决方案1】:

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

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

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

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

    System.exit(0);
    

    将确保两件事:

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

    【讨论】:

    • 这应该是公认的答案,因为它对内部工作原理有更好的解释。
    • 另外值得注意的是,由于System.exit() 放在trycatch 子句中,finally 块将不会被执行——所以如果需要执行一些清理代码,这应该被考虑在内。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      System.exit(0);
      

      这将返回错误代码 0(一切正常)。 System.exit Doc

      【讨论】:

        【解决方案4】:

        使用

        System.exit( someNumber );
        

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

        【讨论】:

          【解决方案5】:

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

          然而,Java 喜欢与众不同! Java 不会返回您在 Main 方法中返回的返回码,但它会在 JVM 退出时返回一些返回码(这考虑到多线程程序),并将返回 System.Exit(returnCode); 调用指定的内容。

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-12-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多