本帖最后由 程金 于 2012-9-21 13:12 编辑
- package test;
- public class BException extends Exception {
-
- public static void main(String[] args) throws Exception {
- ThrowException te = new ThrowException();
- try {
- te.f();//这个方法应该抛出异常BException,但是控制台上没有抛出,没有错误信息,这是怎么回事???
- } finally {
- te.dispose();//这个方法按预期抛出了AException,把这句注释掉的话,前面try语句里面的方法又能抛出异常到控制台了了
- }
- }
- }
- class AException extends Exception {
- }
- class ThrowException {
- void f() throws BException {
- throw new BException();//抛出异常
- }
- void dispose() throws AException {
- throw new AException();//抛出异常
- }
- }
-
- //本来try语句中和finally语句应该都会抛出一个异常,
- // 但是try语句并没有抛出异常,而finally抛出了异常
- //try语句先执行,为什么没有抛出异常呢?很奇怪
- //try语句里面那个没有被捕获的exception肯定会抛出,如果虚拟机都不会去处理,谁去处理?掩盖这个异常?假如这个异常很重要呢
- 输出结果:
- Exception in thread "main" test.AException
- at test.ThrowException.dispose(BException.java:23)
- at test.BException.main(BException.java:10)
-
复制代码 |