2020.10.22作业

阅读以下代码,写出程序运行的结果:

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"); 
        } 
    } 
}

运行结果:

那么接下来的代码会发生什么呢?

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"); 
        } 
    } 
}

运行结果如下:

阅读EmbedFinally.java实例,在阅读它,观察其输出并进行总结。

public class EmbedFinally
{
    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/Gazikel/p/13860773.html