为何代码中System.exit(0)未终止程序,catch与finally块仍执行?
问题原因解析
核心原因很直白:System.exit(0);这行代码根本没被执行到。
代码是按顺序逐行执行的,try块里先执行强制类型转换语句:
fruit fr = (fruit) p;
如果变量p的实际类型不是fruit(也不是它的子类),这一步会直接抛出ClassCastException(属于Exception的子类),程序会立刻跳转到catch块,执行System.out.println("not the right object");。
等catch块执行完毕,不管try/catch的执行结果如何,finally块必然会被执行,所以会输出finablock。
而System.exit(0);排在类型转换语句之后,因为前面已经抛出异常跳转走了,这行代码从来没机会运行,自然不会触发程序终止。
内容的提问来源于stack exchange,提问作者Martien ANGEL
相关产品推荐
相关产品推荐

