终止一个Java程序
我find了终止(closures或停止)我的Java程序的方法。 我find了两个解决scheme。
-
使用return;
当我想退出或终止我的程序执行,我补充一点。 -
使用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; } }
我相信2不会出现。 我想知道是为什么return;
或其他代码可以写在System.exit(0);
的语句下面System.exit(0);
什么是return;
真正定义return;
( 因为我没有任何variables或值return
是奇怪的事情 )?
调用System.exit(0)
(或任何其他值)导致Java虚拟机退出,终止当前进程。 您传递的参数将是java
进程返回到操作系统的返回值。 你可以在程序中的任何地方调用这个调用,结果总是一样的–JVM终止。 因为这只是在System
类中调用一个静态方法,所以编译器不知道它会做什么 – 因此不会抱怨无法访问的代码。
return
语句只是简单地中止当前方法的执行。 这实际上意味着将控制返回给调用方法 。 如果方法被声明为void
(如你的例子),那么你不需要指定一个值,因为你需要返回void
。 如果方法被声明为返回一个特定的types,那么你必须指定要返回的值 – 而且这个值必须是指定的types。
return
只会在程序正在执行的主类的main
方法内部时才会退出。 如果您尝试将代码放在后面,编译器会抱怨无法访问的代码,例如:
public static void main(String... str) { System.out.println(1); return; System.out.println(2); System.exit(0); }
不会编译大多数编译器 – 生成指向第二个System.out.println
调用的unreachable code
错误。
因为System.exit()
只是编译器的另一种方法。 它不提前阅读,并确定整个程序将在这一点退出(JVM退出)。 您的操作系统或shell可以读取在System.exit()
方法中传回的整数。 0
表示“程序退出,一切正常”,标准为0
,任何其他值通知错误发生。 logging这些返回值的任何用户是由开发人员。
另一方面return
是编译器熟知的保留关键字。 返回一个值并结束当前函数的运行,将堆栈移回到调用它的函数(如果有的话)。 在上面的代码中,它返回void
因为你没有提供任何返回。
System.exit()终止JVM。 执行System.exit()后什么都没有。 返回通常用于退出方法。 如果返回types是无效的,那么你可以使用return; 但我认为在主要方法中不是一个好做法。 除非是无限循环或其他一些奇怪的执行stream程,否则您不必为终止程序做任何事情。
- System.exit()是一个导致JVM退出的函数。
- 返回只是将控件返回给调用函数。
- 返回8将返回控制和值8到调用函数。
什么是回报; 意思?
return;
真的意味着它没有任何返回void
。 而已。
为什么回来; 或其他代码可以写在System.exit(0)的语句下面;
这是允许的,因为编译器不知道调用System.exit(0)
将终止JVM
。 编译器会给出一个警告 – 不必要的返回语句
- 那么,第一个System.exit(0)是用来终止程序,并有下面的语句是不正确的,虽然编译器不会引发任何错误。
- 简单的
return;
在void返回types的方法中用于将执行控制权返回给其父方法。
所以回报 并不能真正终止你的java程序 , 它只会终止你的java函数(void) 。 因为在你的情况下,函数是你的应用程序的主要function,返回; 也将终止该申请。 但是回报; 在你的例子是无用的,因为该函数将在这个返回后直接终止…
System.exit()将完全终止你的程序 ,它将closures任何打开的窗口。