终止Java程序

时间:2014-03-17 11:19:04

标签: java

我找到了终止(关闭或停止)Java程序的方法。我找到了两种解决方案。

  1. 使用返回;
    当我想退出或终止程序执行时,我会添加此内容。

  2. 使用 System.exit();
    有时我用它。我从This Question读到了 Sytem.exit()

  3. 所以,我对他们都知之甚少。但我仍然对他们的实际工作方式感到困惑。请检查以下代码......

    public class Testing {
    
    public static void main(String... str) {
        System.out.println(1);
        System.exit(0);
        System.out.println(2);
        return;
     }
    }
    

    我确信 2 不会出现。我想知道为什么return;或其他代码可以写在System.exit(0);语句下面以及return;的真正定义(因为对我来说这是奇怪的事情{{ 1}}没有任何变量或值)?

7 个答案:

答案 0 :(得分:70)

调用System.exit(0)(或任何其他值)会导致Java虚拟机退出,从而终止当前进程。您传递的参数将是java进程将返回操作系统的返回值。您可以从程序中的任何位置进行此调用 - 结果将始终相同 - JVM终止。由于这只是在System类中调用静态方法,编译器不知道它将做什么 - 因此不会抱怨无法访问的代码。

return语句只是中止当前方法的执行。它的字面意思是将控件返回给调用方法。如果该方法被声明为void(如您的示例所示),则您无需指定值,因为您需要返回void。如果声明该方法返回特定类型,则必须指定要返回的值 - 该值必须是指定类型。

return只有在正在执行主类的main方法内时才会退出程序。如果您尝试将代码放在其后,编译器将抱怨无法访问的代码,例如:

public static void main(String... str) {
    System.out.println(1);
    return;
    System.out.println(2);
    System.exit(0);
}

不会与大多数编译器一起编译 - 产生unreachable code错误,指向第二个System.out.println调用。

答案 1 :(得分:8)

因为System.exit()只是编译器的另一种方法。它没有预先读取并且弄清楚整个程序将在那时退出(JVM退出)。您的操作系统或shell可以读取System.exit()方法中传回的整数。 0的标准是“程序退出并且一切正常”以及发生错误通知的任何其他值。开发人员可以为任何用户记录这些返回值。

另一方面,

return是编译器熟悉的保留关键字。 return返回一个值并结束当前函数的运行,将堆栈向上移回调用它的函数(如果有的话)。在上面的代码中,它返回void,因为您没有提供任何要返回的内容。

答案 2 :(得分:6)

  1. System.exit()是导致JVM退出的函数。
  2. 返回只是将控件返回给调用函数。
  3. 返回8 会将控制和值8返回给调用函数。

答案 3 :(得分:5)

System.exit()终止JVM。 System.exit()执行后没有任何内容。 返回通常用于退出方法。如果返回类型为void,则可以使用return; 但我认为在主要方法中做这件事并不是一个好习惯。 除非无限循环或一些奇怪的其他执行流程,否则您不必为终止程序做任何事情。

答案 4 :(得分:4)

所以返回;并没有真正终止你的java程序它只会终止你的java函数(void)。因为在你的情况下,函数是你的应用程序的主要功能,返回;也将终止申请。但回归;在你的例子中没用,因为函数将在此返回后直接终止...

System.exit()将完全终止您的程序,它将关闭所有打开的窗口。

答案 5 :(得分:3)

  

什么回归;意思?

return;实际上意味着它不返回void。就是这样。

  

为什么回归;或其他代码可以写在System.exit(0)的语句下面;

这是允许的,因为编译器不知道调用System.exit(0)将终止JVM。编译器只会发出警告 - 不必要的返回语句

答案 6 :(得分:3)

  • 好吧,首先使用System.exit(0)来终止程序,并且在它下面的语句不正确,尽管编译器不会抛出任何错误。
  • 在void返回类型的方法中使用普通return;将执行控制返回到其父方法。