Java实验6 异常处理

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

二、实验内容
1.【NumberFormatException异常】编写一个程序,提示用户输入两个整数,然后显示它们的和。用户输入错误时提示用户重新输入。
实验结果与分析:
运行结果截图(方法一):
当输入为q w时要求重新输入,输入2 4 两个整数,从而计算出和
Java实验6 异常处理_第1张图片

当输入3 r时提示重新输入,输入3 6时计算出结果
Java实验6 异常处理_第2张图片
源代码:

import java.util.InputMismatchException;
import java.util.Scanner;
public class Hello {
     
    public static void main(String[] args) {
     
        int a = 0;
        int b = 0;
        Scanner input = new Scanner(System.in);
        System.out.println("please input to integers: ");
        T:while (true) {
     
            try {
     
                a = input.nextInt();
                b = input.nextInt();
                System.out.println("Sum = " + (a + b));
            } catch (InputMismatchException ex) {
     
                input.nextLine();
                System.out.println("please input two integers again: ");
                continue T;
            }
            break ;
        }


    }
}

实验结果分析(方法二):

当输入q d时提示用户重新输入,输入1 6 时计算出和
Java实验6 异常处理_第3张图片
源代码:

import java.util.Scanner;
public class Hello {
     
    public static void main(String[] args) {
     
        Scanner input = new Scanner(System.in);
        System.out.println("please input two integer");

        while(true){
     
            try {
     
                String s1 = input.next();
                String s2 = input.next();
                int a1 = Integer.parseInt(s1);
                int a2 = Integer.parseInt(s2);
                System.out.println("Sum is "+(a1+a2));
            }catch (NumberFormatException ex){
     
                input.nextLine();
                System.out.println("Please input two integer again:");
                continue;
            }
            break;
        }
    }
}

心得体会:
NumberFormatException当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常,标准运行时异常类的子类是最常见的异常类。由于 java.lang 包是默认加载到所有的 Java 程序的,所以大部分从运行时异常类继承而来的异常都可以直接使用。
2.(P419, 12.3)【ArrayIndexOutOfBoundsException异常】编写一个程序,创建一个由100个随机选取的整数构成的数组;提示用户输入数组下标,然后显示元素的值,如果指定的下标越界,显示消息out of bounds。
实验结果分析:

当输入101时,数组越界,因此会抛出out of bounds的提示
Java实验6 异常处理_第4张图片
当输入的数组下标不越界时,则输出此时下表对应的值
Java实验6 异常处理_第5张图片
心得体会:
IndexOutOfBoundsException指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
源代码:

import java.util.Scanner;
public class Hello {
     
    public static void main(String[] args) {
     
        Scanner input = new Scanner(System.in);
        int [] a = new int[100];
        for(int i = 0;i<a.length;i++){
     
            a[i] = (int)(Math.random() * 100);
        }
            try {
     
                int num = input.nextInt();
                System.out.println("该下标下的数值为 "+a[num]);
            } catch (IndexOutOfBoundsException ex) {
     
                System.out.println("out of bounds");
            }
        }
}


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

实验结果分析
当输入1时
Java实验6 异常处理_第6张图片
当输入2时:
Java实验6 异常处理_第7张图片
当输入3时:
Java实验6 异常处理_第8张图片
当输入4时:
Java实验6 异常处理_第9张图片
心得体会:
如果在嵌套的方法中中发生异常,异常被抛给被嵌套的最深的catch块,也就是栈顶。
如果抛出异常的数据类型与哪个方法里异常匹配,它在这里就会被捕获。
如果不匹配,它会被传递给所在的方法嵌套的 catch 块,也就是出栈把处理异常交给栈顶。
如此,直到异常被捕获或者通过所有的 catch 块。
源代码:

import java.util.Scanner;

public class hello1 {
     
    public static void main(String args[]) {
     
        Scanner input = new Scanner(System.in);
        System.out.println("请输入1,2,3,4来体会捕获异常");
        int num = input.nextInt();
        try{
     
            m1(num);
        }catch (ArithmeticException ex1){
     
            System.out.println("在主函数发现了错误");
        }
        System.out.println("经过了主函数");

    }
    public static void m1(int num){
     
        try {
     
            m2(num);
        }catch (IndexOutOfBoundsException ex2){
     
            System.out.println("在方法一中发现了错误");
        }
        System.out.println("经过了方法一");
    }
    public static void m2(int num){
     
        try {
     
            m3(num);
        }catch (IllegalArgumentException ex3){
     
            System.out.println("在方法二中发现了错误");
        }
        System.out.println("经过了方法二");
    }
    public static void m3(int num){
     
        try{
     
            switch (num){
     
                case 1:throw new IllegalArgumentException();
                case 2:throw new ArithmeticException();
                case 3:throw new IndexOutOfBoundsException();
                case 4:throw new NullPointerException();
            }
        }catch (NullPointerException ex3){
     
            System.out.println("在方法三中发现了错误");
        }
        System.out.println("经过了方法三");
    }
}

你可能感兴趣的:(Java,字符串,java,编程语言)