实验六 Java 语言异常处理应用练习(课内实验)

一、实验目的

本次实验的主要目的是练习使用 Java 语言异常处理方法,并掌握异常处理程
序的编写方法。

二、实验要求

1. 认真阅读实验内容,完成实验内容所设的题目
2. 能够应用多种编辑环境编写 JAVA 语言源程序
3. 认真体会异常处理的概念和方法

三、实验内容

1. 运行下列程序,观察程序的运行结果中出现异常
A、程序一
public class S61
{
    public static void main(String[] args)
    {
        int x = 0;
        if (x != 0) {
            System.out.println(5 / x);
        } else {
            System.out.println("除数不能为0");
        }
    }
}

 问题:观察此程序出现什么异常,为什么出现这样的异常?

答:在这段代码中,会抛出一个 ArithmeticException 异常。这是因为在 System.out.println(5/x) 这行代码中,尝试将一个数除以0,这是一个不合法的操作,会导致算术运算异常。(简单来说就是除数不能为0的概念源于除法的定义)

B.程序二
public class S62
{
    public static void main(String [] args)
    {
        int [] s = new int[20]; 
        for (int i = 0; i < s.length; i++) {
            s[i] = i;
        }
    }
}
问题 :观察此程序出现什么异常,为什么出现这样的异常?

答:这段代码中,ArrayIndexOutOfBoundsException 会抛出一个 异常。这是因为在 for 循环中,使用了错误的索引范围,导致数组越界。在Java中,数组的索引范围是从0到数组长度减1,因此当使用 i<21 作为循环条件时,会导致 i 的值在循环执行到最后一次时为21,而数组的索引范围是0到19。因此当 i 的值为20时,会超出数组 s 的可用索引范围,引发 ArrayIndexOutOfBoundsException 异常。

C.程序三
public class S63
{
    public static void main(String [] args)
    {
        try
        {
            int j = 5 / 0;
        }
        catch(ArithmeticException e)
        {
            System.out.println("除零异常:" + e.toString());
        }
        finally
        {
            System.out.println("end");
        }
    }
}
问题 :观察此程序出现什么异常,为什么出现这样的异常?
答: 因为尝试将一个数除以0,而在  catch  块中抓住了这个异常,并打印了异常的信息。最后无论是否发生异常, finally  块中的代码都会被执行,并打印 "end"。 通过  try  块和  catch  块,程序可以捕获并处理可能发生的异常,以防止程序意外终止。 finally  块通常用于执行无论异常是否发生都需要被执行的代码,比如清理资源或者关闭文件等操作。 finally  块中的代码会在  try  块中发生异常时也被执行,确保无论发生什么情况,都会打印 "end"。这有助于保证程序在结束时执行必要的收尾工作。
D.程序四
public class S64
{
    public static void main(String [] args)
    {
        try {
            for(int i=0;i<10;i++)
            {
                if(i==9) throw new MyCustomException("Loop stopped at 9");
            }
        }
        catch(MyCustomException e)
        {
            System.out.println(e.toString());
        }
    }
}

class MyCustomException extends Exception
{
    public MyCustomException(String message) {
        super(message);
    }
}
问题 :观察此程序出现什么异常,为什么出现这样的异常?
答: 通过循环迭代变量 i  的值,当 i  的值等于9时,使用 throw new exc() 抛出了一个自定义的异常 exc 。在  catch  块中捕获了这个自定义异常,并打印了异常的信息。 注意 ,在  exc  类的定义中,通过继承  Exception  类创建了一个自定义异常类。这种做法虽然可行,但不是常见的做法。通常情况下,异常应该用于处理预料之外的情况,而不是作为正常流程控制的一部分。抛出异常会对性能产生一定的消耗,因此不应该被频繁地用于正常的流程控制。

四、编写程序完成下列功能

1. 编写一个异常类 MyException ,再编写一个类 Student ,该类有一个产生异
常的方法 public void speak(int m) throws MyException ,要求参数 m 的值大于 1000
时,方法抛出一个 MyException 对象。最后编写主类,在主类的 main 方法中用
Student 创建一个对象,让该对象调用 speak 方法。
// 编写一个异常类MyException
public class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}

// 编写类Student
public class Student {
    // 类Student有一个产生异常的方法speak
    public void speak(int m) throws MyException {
        if (m > 1000) {
            throw new MyException("参数m的值大于1000");
        }
    }
}

// 编写主类
public class Main {
    public static void main(String[] args) {
        // 在主类的main方法中用Student创建一个对象,让该对象调用speak方法
        Student student = new Student();
        try {
            student.speak(1500);
        } catch (MyException e) {
            System.out.println(e.getMessage());
        }
    }
}
2. 自定义类 Sanj ,其中有成员 x,y,z, 作为三边长,构造方法 Sanj(a,b,c) 分别给
x,y,z 赋值 , 方法求面积 getArea 和显示三角形信息 ( 三个边长 )showInfo ,这 2 个方法
中当三 条边丌能构成一个三角形时要抛出自定义异常 NotSanjiaoException ,否则
显示正确信 息。在另外一个类中的主方法中构造一个 Sanj 对象 ( 三边为命令行输
入的三个整数 ) , 显示三角形信息和面积,要求捕获异常。
import java.util.Scanner;

// 自定义异常类
class NotSanjiaoException extends Exception {
    public NotSanjiaoException(String message) {
        super(message);
    }
}

// 自定义三角形类
class Sanj {
    private int x, y, z;

    // 构造方法
    public Sanj(int a, int b, int c) {
        x = a;
        y = b;
        z = c;
    }

    // 求面积方法
    public double getArea() {
        double p = (x + y + z) / 2.0;
        return Math.sqrt(p * (p - x) * (p - y) * (p - z));
    }

    // 显示三角形信息方法
    public void showInfo() throws NotSanjiaoException {
        if (x + y <= z || x + z <= y || y + z <= x) {
            throw new NotSanjiaoException("无法构成三角形");
        } else {
            System.out.println("三角形的三边长分别为:" + x + ", " + y + ", " + z);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        try {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入三角形的三个边长:");
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            int c = scanner.nextInt();

            Sanj sanj = new Sanj(a, b, c);
            sanj.showInfo();
            System.out.println("三角形的面积为:" + sanj.getArea());
        } catch (NotSanjiaoException e) {
            System.out.println("发生异常:" + e.getMessage());
        }
    }
}

五、实验总结

在实验中,我遇到了一些问题,例如如何选择合适的异常类型以及如何正确地捕获和处理异常。通过不断实践和调试,我逐渐掌握了异常处理的技巧,并且能够更好地应对各种异常情况。在以后的编程实践中,我将继续加强对异常处理的理解和应用,以提高代码的稳定性和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/591121.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Mac】Lightroom Classic 2024 v13.1安装教程

软件介绍 Lightroom Classic 2024是Adobe公司推出的一款专业的数字图像处理软件&#xff0c;旨在为摄影师提供强大的工具和功能&#xff0c;以管理、编辑和分享他们的照片作品。以下是Lightroom Classic 2024的主要特点和功能&#xff1a; 数字照片管理&#xff1a; 提供直观…

k8s集群安装

目录 部署步骤概览 1、基础环境部署 2、docker环境部署 3、配置k8s集群 4、集群初始化 5、安装dashboard软件 写在前面&#xff1a;本文安装单点master多node的k8s集群&#xff0c;主要用于k8s学习或k8s环境测试&#xff1b;部署的是1.23版本&#xff0c;在1.24版本起&am…

Android 官网Ota介绍

构建 OTA 软件包 | Android 开源项目 | Android Open Source Project

【RabbitMQ】可靠性策略(幂等,消息持久化)

MQ可靠性策略 发送者的可靠性问题生产者的重连生产者确认 MQ的可靠性数据持久化Lazy Queue 消费者的可靠性问题消费者确认机制消息失败处理 业务幂等性简答问题 发送者的可靠性问题 生产者的重连 可能存在由于网络波动&#xff0c;出现的客户端连接MQ失败&#xff0c;我们可以…

无人机+无人车:自组网协同技术及应用前景详解

无人车&#xff0c;也被称为自动驾驶汽车、电脑驾驶汽车或轮式移动机器人&#xff0c;是一种通过电脑系统实现无人驾驶的智能汽车。这种汽车依靠人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作&#xff0c;使得电脑可以在没有任何人类主动操作的情况下&#xff0c;…

SpringBoot 基础简介

目录 1. SpringBoot 概述 1.1. 为什么会有springboot 1.1.1. 传统Spring 的两个缺点 1.1.2. Springboot 功能 2. SpringBoot 快速搭建 2.1. 创建Maven项目​编辑​编辑​编辑 2.2. 导入SpringBoot起步依赖 2.3. 定义controller 2.4. 添加引导类 2.5. 启动访问 3. Sprin…

香港理工大学内地事务总监陆海天教授确认出席“边缘智能2024 - AI开发者峰会”并发表主题演讲

隨著AI技術的日新月異&#xff0c;我們正步入一個邊緣計算智能化與分布式AI相互融合的新紀元。這一變革不僅推動了分布式智能創新應用的飛速發展&#xff0c;還使得邊緣智能——這一結合邊緣計算和智能技術的新興領域&#xff0c;逐漸成為引領AI發展的重要力量。通過其分布式和…

在家连学校的服务器

在家连接学校的服务器。 Step1: 首先下载一个vscode的插件 Visual Studio Code - Code Editing. Redefined 我的服务区是ubuntu20.04&#xff0c;x64的&#xff0c;所以下载这个。 Step2: 下载到本地之后&#xff0c;想办法将这个文件拷贝到你的服务器上。 Step3: 解压该包…

零基础该如何自学linux运维?

零基础该如何自学linux运维&#xff1f;以下是建议帮助你入门Linux运维的一些建议。 一、自学建议&#xff1a; 理解基础概念&#xff1a;首先&#xff0c;你需要对Linux操作系统的基本概念有所了解&#xff0c;包括文件系统、用户权限、进程管理等。安装Linux系统&#xff1…

AI-数学-高中-47导数与几何意义

原作者视频&#xff1a;【导数】【考点精华】7导数与几何意义考点解析&#xff08;基础&#xff09;_哔哩哔哩_bilibili 该点处切点的斜率 该点处导函数的值 示例1&#xff1a; 导数问题解决最常用方法&#xff1a;参数分离&#xff0c;在左边函数有解的值域范围内。 示例2&…

Jackson-jr 对比 Jackson

关于Jackson-jr 对比 Jackson 的内容&#xff0c;有人在做了一张下面的图。 简单点来说就 Jackson-jr 是Jackson 的轻量级应用&#xff0c;因为我们在很多时候都用不到 Jackson 的很多复杂功能。 对很多应用来说&#xff0c;我们可能只需要使用简单的 JSON 读写即可。 如我们…

微服务总览

微服务保护 微服务总览 微服务总览 接入层&#xff1a;反向代理功能&#xff0c;可以将用户域名访问的地址以负载均衡的方式代理到网关地址&#xff0c;并且并发能力非常高&#xff0c;并且会采用主备nginx的方式防止nginx寄了&#xff0c;备份nginx监控主nginx状态&#xff0c…

CMakeLists.txt 文件内容分析

一. 简介 前一篇文章学习了针对只有一个 .c源文件&#xff0c;cmake工具是如何使用编译的&#xff0c;文章如下&#xff1a; cmake的使用方法:单个源文件的编译-CSDN博客 本文对 所编写的 CMakeLists.txt文件的内容进行分析。从而了解如何编写一个 CMakeLists.txt文件。 二…

ElasticSearch01(ES简介,安装ES,操作索引,操作文档,RestAPI)【全详解】

目录 一、ES简介 1. 数据库查询的问题 2. ES简介 1 ElasticSearch简介 2 ElasticSearch发展 3. 倒排索引【面试】 1 正向索引 2 倒排索引 4. ES和MySql 5. 小结 二、安装ES 1. 方式1:使用docker安装 1 准备工作 2 创建ElasticSearch容器 3 给ElasticSearch配置i…

百度网盘里的文件怎么打印?

在日常生活和工作中&#xff0c;我们经常需要打印各种文件&#xff0c;包括学习资料、工作报告、合同文件等。有时候&#xff0c;这些文件保存在百度网盘等云存储服务中&#xff0c;我们该如何方便地打印出来呢&#xff1f;今天&#xff0c;就为大家介绍一种便捷的方法——通过…

一对一WebRTC视频通话系列(二)——websocket和join信令实现

本系列博客主要记录WebRtc实现过程中的一些重点&#xff0c;代码全部进行了注释&#xff0c;便于理解WebRTC整体实现。 一对一WebRTC视频通话系列往期博客&#xff1a; 一对一WebRTC视频通话系列&#xff08;一&#xff09;—— 创建页面并显示摄像头画面 websocket和join信令…

深入浅出学习Pytorch—Pytorch简介与2024年最新安装(GPU)

深入浅出学习Pytorch—Pytorch简介 学习原因&#xff1a;Pytorch日益增长的发展速度与深度学习时代的迫切需要 Pytorch模型训练 pytorch实现模型训练包括以下的几个方面&#xff08;学习路线&#xff09; 数据&#xff1a;数据预处理与数据增强模型&#xff1a;如何构建模型模…

全栈开发之路——前端篇(4)watch监视、数据绑定和计算属性

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 辅助文档&#xff1a;HTML标签大全&#xff08;实时更新&#xff…

【JVM】从硬件层面和应用层面的有序性和可见性,到Java的volatile和synchronized

Java的关键字volatile保证了有序性和可见性&#xff0c;这里我试着从底层开始讲一下有序性和可见性。 一&#xff0c;一致性 数据如果同时被两个cpu读取了&#xff0c;如何保证数据的一致性&#xff1f;或者换句话说&#xff0c;cpu1改了数据&#xff0c;cpu2的数据就成了无效…

esp32-cam 1. 出厂固件编译与测试

0. 环境 - ubuntu18 - esp32-cam - usb转ttl ch340 硬件连接 esp32-camch340板子U0RTXDU0TRXDGNDGND5V5V 1. 安装依赖 sudo apt-get install vim sudo apt install git sudo apt-get install git wget flex bison gperf python python-pip python-setuptools python-serial p…