Java _SSD3_实验6《异常处理》

  • 实验目的
  1. 编写try-catch块处理异常

 

  • 实验内容

1.【NumberFormatException异常】编写一个程序,提示用户输入两个整数,然后显示它们的和。用户输入错误时提示用户重新输入。

 

    1. 运行结果及其分析

 测试数据一(正确的输入):

测试数据二(输入浮点数):

测试数据三(输入字母):

由以上测试结果可知,该程序完全符合实验要求、

 

12心得体会

   以后遇到一个错误类型,先要去了解它是什么类型,最好直接去官网。比如这里错误类型NumberFormatException是类型转换错误。然后还有一点就是,它会自己抛出,只要捕获就行了。

1.3源代码如下



import java.util.Scanner;

/*.【NumberFormatException异常】编写一个程序,提示用户输入两个整数,然后显示它们的和。用户输入错误时提示用户重新输入。
不要自建类

s
 */
public class Program1 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("请输入两个整数:");
        boolean flag = true;
        do{
         try {
             String a = input.next();
             String b = input.next();
             System.out.println(a+"+"+b+"="+(Integer.valueOf(a)+Integer.valueOf(b)));
             flag = false;         //只要在某一步捕获到错误就退出
         }
          catch (NumberFormatException ex){
              System.out.println("对不起!您的输入有误!\n请重新输入两个整数:");
          }
        }while (flag);

    }
}

2.(P419, 12.3)【ArrayIndexOutOfBoundsException异常】编写一个程序,创建一个由100个随机选取的整数构成的数组;提示用户输入数组下标,然后显示元素的值,如果指定的下标越界,显示消息out of bounds。

2.1运行结果及其分析

测试数据一(输入正确):

测试数据二(输入错误数据):

由上面的测试结果可知,该程序完全符合实验要求。

 

2.2心得体会

  为了达到实验目的,也可以直接自己在try语句块中抛出。总而言之, 异常处理机制非常美妙。

 

2.3源代码如下



import java.util.Scanner;






public class Program2 {
    public static void main(String[] args) {
        int[] random = new int[100];
        Scanner input = new Scanner(System.in);
        for(int i=0;i<100;i++)
            random[i] = (int)(Math.random() * 100000);

        boolean flag = true;
        System.out.print("请输入数组下标(0-99):");
       do{
           try{
               int index = input.nextInt();
               if(index < 0 || index >99)
                   throw new ArrayIndexOutOfBoundsException("out of bounds");
               System.out.println(random[index]);
               flag = false;
           }
           catch (ArrayIndexOutOfBoundsException ex){
               System.out.print("out of bounds!请重新输入:");
           }
       }while (flag);

    }

}

3. 请将下图所示的内容转换成可运行的代码,尝试抛出不同类型的异常,理解寻找异常处理器的过程及代码执行的流程 

3.1运行成果及其分析

检验一:

 

 

 

检验二:

检验三:

检验四:

 

3.2心得体会

  怎么去用程序去体会异常处理机制,本来思路已经很清晰了。却没想到由于代码量比较多,一下就乱了思路,顿生烦躁。我想这莫不就是Java开发人员易秃头的原因,hh。所幸最后还是编了一个检验各种情况下,异常处理机制运行的超级全的小程序。内心还是欣喜的,通过这个程序可随时体验异常处理的基本机制。

然后还发现了几个问题: 如果函数中显示抛出一个异常,所有cacth语句都无法捕获时,会报错;如果一个方法中抛出了一个必检异常,该方法和调用该方法的所有上一级方法都需要声明该异常。

 

3.3源代码如下

package Lab6;  
  
import java.io.IOException;  
import java.util.Scanner;  
  
/*请将393页图12-3所示的内容转换成可运行的代码,尝试抛出不同类型的异常,理解寻找异常处理器的过程及代码执行的流程。*/  
public class Program3 {  
    public static void method1(int a){//整数除以0异常  
        try {  
            System.out.println("方法一中调用方法二时的前面一条语句");  
            if(a == 1){  
                System.out.println("方法一中抛出ArithmeticException");  
                throw new ArithmeticException("1");  
            }  
            method2(a);  
            System.out.println("方法一中调用了方法二后的语句");  
        }  
        catch (NullPointerException ex){  
            System.out.println("方法一捕捉到方法三中的NullPointerException");  
        }  
        System.out.println("方法一try catch 块结束后的语句");  
    }  
  
    public static void method2(int a) //数组越界  
    {  
        try{  
  
            if(a == 2){  
                System.out.println("方法二中抛出IndexOutOfBoundsException");  
                throw new IndexOutOfBoundsException("2");  
            }  
            System.out.println("方法二中调用方法三时的前面一条语句");  
            method3(a);  
            System.out.println("方法二中调用方法三的后面一条语句");  
        }catch (NullPointerException ex){  
            System.out.println("方法二中捕捉到方法三中的NullPointerException");  
        }  
        System.out.println("方法二try catch 块结束后的语句");  
  
    }  
    public static void method3(int a) {//空指针异常 and IllegalArgumentException  
        try {  
            if(a == 3){  
                System.out.println("方法三中抛出NullPointerException");  
                throw new NullPointerException("3");  
            }  
            if(a == 4)  
            {  
                System.out.println("方法三中抛出ClassNotFoundException");  
                //throw new ClassNotFoundException("4");  
                Object o = new Object();  
                String s = (String)o;  
            }  
        }catch (IllegalArgumentException ex){  
            System.out.println("方法三中捕捉到IllegalArgumentException");  
        }  
        System.out.println("方法三try catch 块结束后的语句");  
  
    }  
  
    public static void main(String[] args) {  
        Scanner input = new Scanner(System.in);  
  
        System.out.println("1.抛出方法一中的异常!(只有主函数可以捕捉)");  
        System.out.println("2.抛出方法二中的异常!(只有主函数可以捕捉)");  
        System.out.println("3.抛出方法三中的异常!(方法二和主函数可以捕捉)");  
        System.out.println("4.抛出方法三中的异常!(没有任何的方法可以捕捉)");  
        System.out.print("输入你想检验的操作前面的代号:");  
        int a = input.nextInt();  
        System.out.println("下面输出程序将执行的语句:");  
        System.out.println();  
        try {  
            System.out.println("主函数中方法一前面的语句");  
            method1(a);  
            System.out.println("主函数中方法一后面的语句");  
        }  
  
        catch (NullPointerException ex){  
            System.out.println("主函数中捕捉到方法三中的NullPointerException");  
        }catch (IndexOutOfBoundsException ex){  
            System.out.println("主函数中捕捉到方法二中的IndexOutOfBoundsException");  
        }  
        catch (ArithmeticException ex){  
            System.out.println("主函数中捕捉到方法一中的ArithmeticException");  
        }  
  
        finally {  
            System.out.println("主函数中的finally子句");  
        }  
  
        System.out.println("主函数try catch 块结束后的语句");  
  
    }  
}  

猜你喜欢

转载自blog.csdn.net/qq_45768060/article/details/106337429