实验十 异常处理

一、实验预热
1、请解释编译时异常和运行时异常的区别,并举出几个常见的编译时异常和运行时异常
1)编译时异常是在编写程序是就会发现的异常,例如:IOException、FileNotFoundException、SQLException、NoSuchMethodException、ClassNotFoundException
2)运行时异常是程序在运行期间发现的异常,例如:ArrayIndexOutOfBoundsException、ArithmeticException、IllegalArgumentException、ClassCastException、NumberFormatException、NullPointerException

2、请说出throw和throws的区别
Throw是抛出异常实例化对象(一定抛出异常)
Throws是抛出异常声明(可能抛出异常)

二、实验内容
1、自行完成一个简单的自定义异常并处理,使程序正确执行,并获得异常返回信息。
代码:

package leif.tests;

public class ExperimentalReport {
    public static void main(String[] args) {
        try {
            throw new ServiceException("ServiceException");
        } catch (ServiceException serviceException) {
            System.out.println(serviceException.getMessage());
            System.out.println(serviceException.getServiceExceptionMessage());
            serviceException.printStackTrace();
        }
    }
}

class ServiceException extends Exception {
    private static final long serialVersionUID = 1L;
    private String serviceExceptionMessage;

    public ServiceException(String serviceExceptionMessage) {
        super("Exception");
        this.serviceExceptionMessage = serviceExceptionMessage;
    }

    public String getServiceExceptionMessage() {
        return serviceExceptionMessage;
    }

    public void setServiceExceptionMessage(String serviceExceptionMessage) {
        this.serviceExceptionMessage = serviceExceptionMessage;
    }
}

结果截图:


image.png

2、在程序中实现两个数字求商的功能,当除数为0时,正确使用try-catch-finally捕捉如图所示的程序异常。


image.png

代码:

package leif.tests;

import java.util.Scanner;

public class ExperimentalReport {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入被除数:");
        int dividend = scanner.nextInt();
        System.out.print("请输入除数:");
        int divisor  = scanner.nextInt();

        try {
            if (!isInterger(dividend) || !isInterger(divisor) || isZero(divisor)) {
                throw new ArithmeticException("出现错误:被除数和除数必须是整数,且除数不能为零。");
            }

            System.out.println(dividend / divisor);
        } catch (ArithmeticException arithmeticException) {
            arithmeticException.printStackTrace();
        } finally {
            scanner.close();
        }
    }

    public static boolean isInterger(Object object) {
        if (object instanceof Integer) {
            return true;
        } else {
            return false;
        }
    }

    public static boolean isZero(int i) {
        if (i == 0) {
            return true;
        } else {
            return false;
        }
    }
}

结果截图:


image.png

3、在程序中编写方法实现计算两数的商,该方法使用throws声明异常,在该方法的调用处使用try-catch-finally进行异常捕捉。
代码:

package leif.tests;

import java.util.Scanner;

public class ExperimentalReport {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入被除数:");
        int dividend = scanner.nextInt();
        System.out.print("请输入除数:");
        int divisor  = scanner.nextInt();

        try {
            getResult(dividend, divisor);
        } catch (ArithmeticException arithmeticException) {
            arithmeticException.printStackTrace();
        } finally {
            scanner.close();
        }
    }

    public static int getResult(int dividend, int divisor) throws ArithmeticException {
        return dividend / divisor;
    }
}

结果截图:


image.png

4、正确使用throw抛出异常,实现当输入的性别不是“男”或“女”时,显示如下图所示的程序异常效果。


image.png

代码:

package leif.tests;

import java.util.Scanner;

public class ExperimentalReport {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入性别:");
        String gender = scanner.next();

        try {
            if (!"男".equals(gender) && !"女".equals(gender)) {
                throw new Exception("性别必须是“男”或“女”!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            scanner.close();
        }
    }
}

结果截图:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一...
    阿里高级软件架构师阅读 3,319评论 0 19
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,173评论 0 41
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,953评论 0 2
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,355评论 0 9
  • 已经记不清时隔几年了没动笔了,零基础的我还是选择在今天重新拿起画笔,只因为喜欢。在这急躁时代里,想要自己静下来,唯...
    酱西小丸子阅读 1,693评论 0 4