我找到了终止(关闭或停止)Java程序的方法。我找到了两种解决方案。
使用返回;
当我想退出或终止程序执行时,我会添加此内容。
使用 System.exit();
有时我用它。我从This Question读到了 Sytem.exit()。
所以,我对他们都知之甚少。但我仍然对他们的实际工作方式感到困惑。请检查以下代码......
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}}没有任何变量或值)?
答案 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)
答案 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)
return;
将执行控制返回到其父方法。