Java 代码的返回值

发布于 2024-11-25 17:05:06 字数 559 浏览 1 评论 0原文

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

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

There is a Java class which creates a POST request and sends it to a servlet.
The main method of the class file (test) looks something like this:

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

This is called from a KornShell (ksh) script something like this:

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

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

retcode always has the value "2" independent of if the code fails or succeeds.
My question is since the return type of my main method is "void" why is the code returning some value?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

一向肩并 2024-12-02 17:05:06

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

相反,当不再有非守护线程运行或 System.exit() 被调用。

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

因此,以这样的方式结束 main() 方法

System.exit(0);

将确保两件事:

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

The return value of a Java application is not the return value of it's main method, because a Java application doesn't necessarily end when it's main method has finished execution.

Instead the JVM ends when no more non-daemon threads are running or when System.exit() is called.

And System.exit() is also the only way to specify the return value: the argument passed to System.exit() will be used as the return value of the JVM process on most OS.

So ending your main() method with this:

System.exit(0);

will ensure two things:

  • that your Java application really exits when the end of main is reached and
  • that the return value of the JVM process is 0
栀子花开つ 2024-12-02 17:05:06

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

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

Java programs do not return an exit code back to the operating system by returning a value from main, as is done in C and C++. You can exit the program and specify the exit code by calling System.exit(code);, for example:

// Returns exit code 2 to the operating system
System.exit(2);
天赋异禀 2024-12-02 17:05:06
System.exit(0);

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

System.exit(0);

This returns error code 0 (everything went fine).
System.exit Doc

喜爱纠缠 2024-12-02 17:05:06

使用

System.exit( someNumber );

此选项将使您的应用程序能够控制操作系统看到的返回值。

Use

System.exit( someNumber );

this will give your app control over the return value seen by the OS.

贩梦商人 2024-12-02 17:05:06

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

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

Your program always returns a return code after exiting. In normal programs, if you do not specify a return code, it will return zero (this includes setting the return type to void).

Java, however, likes to be special! Java won't return the return code you return at the Main method, but it'll return some return code when the JVM exits (this accounts for multithreaded programs), and will return what a System.Exit(returnCode); call specifies.

浅浅 2024-12-02 17:05:06

您没有获得退出状态,这就是 $? 包含的内容。无论写入 System.out 中的内容如何,​​您都会获得标准输出。

You're not getting the exit status, that's what $? contains. You're getting standard out, whatever is written to System.out.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文