finally调用流程

一般情况下,finally块的内容是保证要被执行的,即使在try块中抛出了异常,如:

	try {
		throw new Exception("Manually throw an exception");
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		System.out.println("Finally statement is being executed!");
	}


但也有例外情况。

1. try中调用System.exit(i)方法

   下面的finally块不会执行:
	try {
		System.exit(0);
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		System.out.println("Finally statement is being executed!");
	}


2. SwingUtilities.invokeLater调用System.exit(i)方法

下面的finally块会执行:
	try {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				System.exit(0);
			}
		});
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		System.out.println("Finally statement is being executed!");
	}

顾名思义,invokeLater调用的任务会延后执行。

3. 在执行try块的时候,虚拟机进程被终止,或者系统断电

你可能感兴趣的:(java,System,exit,finally)