终止Java程序

Cat*_*ysm 63 java

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

  1. 使用回报;
    当我想退出或终止程序执行时,我添加了这个.

  2. 使用System.exit() ;
    有时我用它.我从这个问题中读到了Sytem.exit().

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

public class Testing {

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

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

Ale*_*s G 77

调用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);
}
Run Code Online (Sandbox Code Playgroud)

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


ind*_*ble 9

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

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

  • 它真的会返回"null"吗?这无关紧要吗?你不能在方法中返回`null`,返回类型为`void`. (2认同)

pra*_*y00 9

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


Ree*_*ube 6

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

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


小智 5

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


ani*_*udh 5

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