多态异常处理课后作业

动手动脑:多层的异常捕获-1

源代码:

public class CatchWho {

     public static void main(String[] args) {

        try {

            try {

                throw new ArrayIndexOutOfBoundsException();

            }

            catch(ArrayIndexOutOfBoundsException e) {

               System.out.println(  "ArrayIndexOutOfBoundsException" +  "/内层try-catch");

            }
            throw new ArithmeticException();

        }

        catch(ArithmeticException e) {

            System.out.println("发生ArithmeticException");

        }  

       catch(ArrayIndexOutOfBoundsException e) {

           System.out.println(  "ArrayIndexOutOfBoundsException" + "/外层try-catch");

        }

    }

}

运行结果:

动手动脑:多层的异常捕获-2

源代码:

public class CatchWho2 {

    public static void main(String[] args) {

        try {

            try {

                throw new ArrayIndexOutOfBoundsException();

            }

            catch(ArithmeticException e) {

                System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch";

             }

            throw new ArithmeticException();

        }

        catch(ArithmeticException e) {

            System.out.println("发生ArithmeticException");

        }

        catch(ArrayIndexOutOfBoundsException e) {

            System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");

        }

    }

}

运行结果:

动手动脑

当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机。请先阅读示例,再运行它,观察其输出并进行总结。
源代码:

public class EmbededFinally {

public static void main(String args[]) {
int result;
try {
System.out.println("in Level 1");

try {
System.out.println("in Level 2");   // result=100/0;  //Level 2
try {
System.out.println("in Level 3");
result=100/0;  //Level 3
}
catch (Exception e) {
System.out.println("Level 3:" + e.getClass().toString());
}
finally {
System.out.println("In Level 3 finally");
}
// result=100/0;  //Level 2

}
catch (Exception e) {
System.out.println("Level 2:" + e.getClass().toString());
} finally {
System.out.println("In Level 2 finally");
}
// result = 100 / 0;  //level 1
}
catch (Exception e) {
System.out.println("Level 1:" + e.getClass().toString());
}
finally {
. System.out.println("In Level 1 finally");
}
}

}

运行结果:
结论:
当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。
动手动脑:
辨析:finally语句块一定会执行吗?

public class SystemExitAndFinally {

    public static void main(String[] args)     {

        try{

            System.out.println("in main");

            throw new Exception("Exception is thrown in main");             //System.exit(0);

        }

        catch(Exception e)

        {

            System.out.println(e.getMessage());

            System.exit(0);

        }

        finally

        {   

          System.out.println("in finally");

        }

    }

}

运行结果:
结论:finally语句不一定执行。
原文地址:https://www.cnblogs.com/wanggang-java/p/4966910.html