zoukankan      html  css  js  c++  java
  • 完成课件中的动手动脑的或需要验证的相关内容。 (截止时间2017-11-16晚23:00)

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

     1 import javax.swing.*;
     2 class AboutException
     3 {
     4     public static void main(String[] a) 
     5     {
     6         float i=1, j=0, k;
     7         k=i/j;
     8         System.out.println(k); 
     9         try
    10         {
    11             k = i/j; // Causes division-by-zero exception
    12             //throw new Exception("Hello.Exception!");
    13         }
    14         catch ( ArithmeticException e)
    15         {
    16             System.out.println("被0除. "+ e.getMessage());
    17         }
    18         catch (Exception e)
    19         {
    20             if (e instanceof ArithmeticException)
    21                 System.out.println("被0除");
    22             else
    23             { 
    24                 System.out.println(e.getMessage());
    25             }
    26         }
    27         finally
    28         {
    29             JOptionPane.showConfirmDialog(null,"OK");
    30         }
    31     }
    32 }

      代码执行时不发生异常。

      jvm在处理浮点数时,生成的是ddiv字节码指令,i/0,0转化为浮点数0.0,而0.0是double类型的,并不精确,所以不会抛出异常。

      jvm在处理整数时,生成的是idiv字节码指令,整数除0就是除0,会抛出异常。

    异常处理:Java中异常捕获语句

     1 try
     2 {
     3     //用于监控可能发生错误的语句
     4 }
     5 catch(异常类型 异常对象引用)
     6 {
     7     //用于捕获并处理异常的代码
     8 }
     9 finally
    10 {
    11     //用于“善后” 的代码
    12 }

      不管是否有异常发生,finally语句块中的语句始终保证被执行。

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

     1 public class CatchWho
     2 { 
     3     public static void main(String[] args)
     4     { 
     5         try
     6         { 
     7             try
     8             { 
     9                 throw new ArrayIndexOutOfBoundsException(); 
    10             } 
    11             catch(ArrayInde
    12 xOutOfBoundsException e)
    13             { 
    14                 System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch"); 
    15             }
    16             throw new ArithmeticException(); 
    17         } 
    18         catch(ArithmeticException e)
    19         {
    20             System.out.println("发生ArithmeticException"); 
    21         } 
    22         catch(ArrayIndexOutOfBoundsException e)
    23         { 
    24             System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch"); 
    25         } 
    26     } 
    27 }        

    运行结果:

      ArrayIndexOutOfBoundsException/内层try-catch
      发生ArithmeticException

    截图:

       

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

     1 public class CatchWho2
     2 { 
     3     public static void main(String[] args)
     4     { 
     5         try    
     6         {
     7             try
     8             { 
     9                 throw new ArrayIndexOutOfBoundsException(); 
    10             } 
    11             catch(ArithmeticException e)
    12             { 
    13                 System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch"); 
    14             }
    15             throw new ArithmeticException(); 
    16         } 
    17         catch(ArithmeticException e)
    18         { 
    19             System.out.println("发生ArithmeticException"); 
    20         } 
    21         catch(ArrayIndexOutOfBoundsException e)
    22         { 
    23             System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch"); 
    24         } 
    25     } 
    26 }

    运行结果:

      ArrayIndexOutOfBoundsException/外层try-catch

    截图:

       

    结果分析:

      当异常未被处理时无法接受新的异常

    4>请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。

     1 public class EmbededFinally
     2 {
     3     public static void main(String args[])
     4     { 
     5         int result; 
     6         try
     7         { 
     8             System.out.println("in Level 1");
     9             try
    10             { 
    11                 System.out.println("in Level 2");
    12                 //result=100/0; //Level 2 
    13                 try
    14                 { 
    15                     System.out.println("in Level 3"); 
    16                     result=100/0; //Level 3 
    17                 } 
    18                 catch (Exception e)
    19                 { 
    20                     System.out.println("Level 3:" + e.getClass().toString()); 
    21                 } 
    22                 finally
    23                 { 
    24                      System.out.println("In Level 3 finally"); 
    25                 } 
    26                 // result=100/0; //Level 2 
    27             } 
    28             catch (Exception e)
    29             {
    30                  System.out.println("Level 2:" + e.getClass().toString()); 
    31             }
    32             finally
    33             { 
    34                 System.out.println("In Level 2 finally"); 
    35             } 
    36             // result = 100 / 0; //level 1 
    37         } 
    38         catch (Exception e)
    39         {
    40             System.out.println("Level 1:" + e.getClass().toString());
    41         }
    42         finally
    43         {
    44             System.out.println("In Level 1 finally");
    45         }
    46     }
    47 }

     运行结果:

       

       

    结果分析

      当外层异常未被处理时,内层异常不会被处理并且finally也不会执行,当有多层嵌套的finally语句时,异常在不同层次不同位置抛出时,也会导致不同的finally语句块执行顺序。

    5>finally语句块一定会执行吗?

      请通过 SystemExitAndFinally.java示例程序回答上述问题。

     1 public class SystemExitAndFinally
     2 { 
     3     public static void main(String[] args)
     4     { 
     5         try
     6         { 
     7             System.out.println("in main");
     8             throw new Exception("Exception is thrown in main");
     9             //System.exit(0); 
    10         } 
    11         catch(Exception e)
    12         { 
    13             System.out.println(e.getMessage());
    14             System.exit(0);
    15         } 
    16         finally 
    17         { 
    18             System.out.println("in finally"); 
    19         } 
    20     }
    21 }

    运行结果:

       

       

      首先只有与finally对应的try语句得到执行的情况下finally语句才会执行,但如果finally语句之前出现例如System.exit(0) 等使Java虚拟机停止运行的语句时finally语句也不会被执行。

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

     1 import java.util.Scanner;
     2 class MyException extends Exception
     3 {
     4     MyException(String str)
     5     {
     6         super(str);
     7     }
     8 }
     9 class GradeTest
    10 {
    11     private double grade;
    12     public void InputGrade(String s)
    13     {
    14         boolean flag = true;
    15         try
    16         {
    17             for(int i = 0;i<s.length();i++)
    18             {
    19                 if((s.charAt(i) < '0' || s.charAt(i) > '9')&& s.charAt(i) != '.')
    20                 flag = false;
    21             }
    22             if(!flag)
    23            {
    24                throw new MyException("请输入数字!");
    25            }
    26            try
    27 
    28            {
    29                grade = Double.parseDouble(s);
    30                if(grade < 0.0 || grade > 100.0)
    31                {
    32                    throw new MyException("请输入0.0到100.0的数据!");
    33                }
    34                if(grade < 60.0)
    35                    System.out.println("不及格");
    36                else if(grade <70.0)
    37                    System.out.println("及格");
    38                else if(grade < 80.0)
    39                    System.out.println("中");
    40                else if(grade < 90.0)
    41                    System.out.println("良");
    42                else
    43                    System.out.println("优");
    44                }
    45                catch(MyException e)
    46                {
    47                    System.out.println(e.getMessage());
    48                }
    49         }
    50         catch(MyException e)
    51         {
    52             System.out.println(e.getMessage());
    53         }
    54     }
    55 }
    56 public class Grade
    57 {
    58     public static void main(String[] args)
    59     {
    60         // TODO Auto-generated method stub
    61         Scanner in = new Scanner(System.in);
    62         GradeTest G = new GradeTest();
    63         System.out.println("请输入成绩:");
    64         String str = in.nextLine();
    65         G.InputGrade(str);
    66         in.close();
    67     }
    68 }        

     运行结果:

       

       

       

      

  • 相关阅读:
    java 策略模式
    Android使用ListView应该注意的地方
    Zxing android 解析流程
    java 工厂模式
    Java 单例模式
    TextView的属性详解
    java 装饰者模式
    CSS outline:none
    php数组
    利用Google API快速生成QR二维码
  • 原文地址:https://www.cnblogs.com/guobin-/p/7846731.html
Copyright © 2011-2022 走看看