异常处理-课后作业

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常处理-课后作业相关的知识,希望对你有一定的参考价值。

1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识。

AboutException.java

import javax.swing.*;

class AboutException

{
  public static void main(String[] a) 
  {
    int i=1, j=0, k; 
    k=i/j;

    try
    {

      k = i/j; // Causes division-by-zero exception
      //throw new Exception("Hello.Exception!");
    }

    catch ( ArithmeticException e)
    {
    System.out.println("被0除. "+ e.getMessage());
    }

    catch (Exception e)
    {
      if (e instanceof ArithmeticException)
        System.out.println("被0除");
      else
      {   
        System.out.println(e.getMessage());
  
      }
    }


    finally
    {
      OptionPane.showConfirmDialog(null,"OK");
    }

  }
}

【运行截图】

技术分享图片

2.阅读以下代码(CatchWho.java),写出程序运行结果:

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

运行截图:

技术分享图片

3.写出CatchWho2.java程序运行的结果

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

运行截图:

技术分享图片

 

4.当有多个嵌套的try…catch…finally时,要特别注意finally的执行时机。

请先阅读EmbedFinally.java示例,再运行它,观察其输出并进行总结。
特别注意:
当有多层嵌套的finally时,异常在不同的层次抛出,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

 

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

      }

    }

  }

【运行截图】

技术分享图片

5.

辨析:finally语句块一定会执行吗?
请通过SystemExitAndFinally.java示例程序回答上述问题

 

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一般会被执行,但也会有不执行的时候,

它的运行结果只有

in main
Exception is thrown in main

finally并没有执行,因为 System.exit(status);这个方法是用来结束当前正在运行中的java虚拟机。如何status是非零参数,那么表示是非正常退出。

6、编写一个程序,此程序在运行时要求用户输入一个整数,代表某门课的沉积,程序接着给出“不及格”,“及格”,“中”,“良”,“优”的结论。

答:

  import java.util.Scanner;

  public class Test

  {

    public static void main(String[] args)   

    {
      // TODO Auto-generated method stub
      Scanner con=new Scanner(System.in);
      try

      {
        System.out.println("请输入成绩:");
        int ch=con.nextInt();
        if(ch<60&&ch>=0)

        {

          System.out.println("不及格");

        }

        else

          if(ch==60)

          {

            System.out.println("及格");

          }
          else

            if(ch>60&&ch<80)

            {

              System.out.println("中");

            }
            else

              if(ch>=80&&ch<90)

              {

                System.out.println("良");

              }
              else

                if(ch>=90&&ch<=100)

                {

                  System.out.println("优");

                }
       }

       catch(ArrayStoreException e)

       {
         e.printStackTrace();
       }

       finally

       {

          System.out.println("Over");

          System.exit(0);
        }
     }

  }

截图:

技术分享图片
















































































































































































以上是关于异常处理-课后作业的主要内容,如果未能解决你的问题,请参考以下文章

异常处理---动手动脑及课后作业

08 多态与异常处理

动手动脑

第12章 异常

Java学习笔记3.10.3 异常处理 - 抛出异常

异常处理(9.23)——————————课后练习