📜  Java程序的输出|第 12 集(异常处理)

📅  最后修改于: 2022-05-13 01:55:17.435000             🧑  作者: Mango

Java程序的输出|第 12 集(异常处理)

先决条件:异常处理,try-catch-finally 中的控制流
1)以下程序的输出是什么?

public class Test
{
    public static void main(String[] args)
    {
        try
        {
            System.out.printf("1");
            int sum = 9 / 0;
            System.out.printf("2");
        }
        catch(ArithmeticException e)
        {
            System.out.printf("3");
        }
        catch(Exception e)
        {
            System.out.printf("4");
        }
        finally
        {
            System.out.printf("5");
        }
    }
}

一)1325
b) 1345
c) 1342
d) 135

答。 (d)
解释:一旦 try 块中发生异常,执行将传递到相应的 catch 语句,并且不会返回到 try 块。一次只执行一个 catch 块。 finally 块总是执行,无论是否发生异常。

2) 以下程序的输出是什么?

public class Test
{
    private void m1()
    {
        m2();
        System.out.printf("1");
    }
    private void m2()
    {
        m3();
        System.out.printf("2");
    }
    private void m3()
    {
        System.out.printf("3");
        try
        {
            int sum = 4/0;
            System.out.printf("4");
        }
        catch(ArithmeticException e)
        {
            System.out.printf("5");
        }
          
          
        System.out.printf("7");
    }
    public static void main(String[] args)
    {
        Test obj = new Test();
        obj.m1();
    }
}

一)35721
b) 354721
c) 3521
d) 35
答。 (一种)
说明:如果在 catch 语句中处理了异常,则程序在执行与该异常对应的 catch 语句后继续正常执行。此外,当 try 块中发生异常时,不会执行 try 块中的其余程序。

3) 以下程序的输出是什么?

public class Test
{
    public static void main(String[] args)
    {
        try
        {
            System.out.printf("1");
            int data = 5 / 0;
        }
        catch(ArithmeticException e)
        {
            System.out.printf("2");
            System.exit(0);
        }
        finally
        {
            System.out.printf("3");
        }
        System.out.printf("4");
    }
}

一)12
b) 1234
三)124
d) 123

答。 (一种)
说明: finally 块中的代码不执行的唯一情况是在程序中显式调用 System.exit(0) 时。然后调用 exit 语句,程序终止,不再执行。

4) 以下程序的输出是什么?

public class Test
{
    public static void main(String[] args)
    {
        try
        {
            System.out.printf("1");
            int data = 5 / 0;
        }
        catch(ArithmeticException e)
        {
            Throwable obj = new Throwable("Sample");
            try 
            {
                throw obj;
            } 
            catch (Throwable e1) 
            {
                System.out.printf("8");
            }
        }
        finally
        {
            System.out.printf("3");
        }
        System.out.printf("4");
    }
}

a) 编译错误
b) 运行时错误
c) 1834
d) 134

答。 (C)
说明: catch 子句中可以抛出异常。这样做是为了在运行时更改异常类型。 catch 子句中的异常是通过创建 Throwable 类的实例来引发的,如程序所示。

5) 以下程序的输出是什么?

import java.io.EOFException;
import java.io.IOException;
  
public class Test
{
    public static void main(String[] args)
    {
        try
        {
            System.out.printf("1");
            int value = 10 / 0;
            throw new IOException();
        }
        catch(EOFException e)
        {
            System.out.printf("2");
        }
        catch(ArithmeticException e)
        {
            System.out.printf("3");
        }
        catch(NullPointerException e)
        {
            System.out.printf("4");
        }
        catch(IOException e)
        {
            System.out.printf("5");
        }
        catch(Exception e)
        {
            System.out.printf("6");
        }
    }
}

一)1346
b) 136726
三)136
d) 13
答。 (d)
解释:在 multi-catch 语句中,异常必须从更具体到更一般列出。只执行一个最特定于发生的异常的 catch 语句。