上机实验4 异常处理案例

简介: 上机实验4 异常处理案例

实验1 检查危险品

一、实验目的

本实验的目的是让学生掌握使用try-catch语句

二、实验内容

车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。

编写一个Exception的子类DangerException,该子类可以创建异常对象,该异常对象调用toShow()方法输出“属于危险品”。

编写一个Machine类,该类的方法checkBag(Goods goods)当发现参数goods是危险品时(goods的isDanger属性是true)将抛出DangerException异常。

程序在主类的main()方法中的try-catch语句的try部分让Machine类的实例调用checkBag(Goods goods)方法,如果发现危险品就在try-catch语句的catch部分处理危险品。

三、程序代码

1. class Goods {
2.     boolean isDanger;
3.     String name;
4.     public void setIsDanger(boolean boo) {
5.        isDanger = boo;}
6.     public boolean isDanger() {
7.        return isDanger;  
8.        }
9.     public void setName(String s) {
10.         name = s;
11.         }
12.      public String getName() {
13.         return name;
14.         }
15.      }
16. class DangerException extends Exception {
17.      String message;
18.      public DangerException() {
19.          message = "危险品!";
20.      }
21.      public void toShow() {
22.          System.out.print(message+" ");
23.          }
24.      }
25. class Machine {
26.     public void checkBag(Goods goods) throws DangerException {
27.        if(goods.isDanger()) {
28.            DangerException danger=new DangerException();
29.            throw new DangerException();//【代码1】   //抛出danger
30.        }
31.        else {System.out.print(goods.getName()+"不是危险品! ");
32.        }
33.     }
34.   }
35. public class Check {
36.   public static void main(String args[]) {
37.         Machine machine = new Machine();
38.         String name[] ={"苹果","炸药","西服","硫酸","手表","硫磺"};
39.         Goods [] goods = new Goods[name.length]; //检查6件货物  
40.         for(int i= 0;i<name.length;i++) {
41.            goods[i] = new Goods();
42.            if(i%2==0) {
43.               goods[i].setIsDanger(false);
44.               goods[i].setName(name[i]);
45.            }
46.            else {
47.               goods[i].setIsDanger(true);
48.               goods[i].setName(name[i]);
49.            }
50.         }
51.         for(int i= 0;i<goods.length;i++) {
52.           try {
53.               machine.checkBag(goods[i]);
54.               System.out.println(goods[i].getName()+"检查通过");
55.               }
56.           catch(DangerException e) {
57.              e.toShow(); //e调用toShow()方法
58.              System.out.println(goods[i].getName()+"被禁止!"); 
59.              }
60.           }
61.         }
62.   }

四、实验指导

1、try-catch语句可以有几个catch组成,分别处理发生的相应异常。

2、catch参数中的异常类都是Exception的某个子类,表明try部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的catch即可。

实验2 使用自定义异常

创建一个输入3条边长表示一个三角形的Triangle类,并计算其面积

1. import java.util.Scanner;//导入Scanner类
2. public class SX6 {//主类
3. public static void main(String[] args) {//主方法
4.  Scanner val = new Scanner(System.in);//声明一个Scanner对象
5.  System.out.println("请输入三角形的3条边长:");
6.  while(true) {//死循环,只有正确输入三角形面积后才能退出
7.    double a = val.nextDouble();
8.    double b = val.nextDouble();
9.    double c = val.nextDouble();//读取用户输入的三个边长值
10.     try {//创建类是可能会发生异常,故放在try语句块中
11.       Triangle t = new Triangle(a,b,c);
12.       System.out.println("三角形面积为:"+t.getArea());
13.       break;//结束运行
14.     }
15.     catch(IllegaTriangleException ex) {//捕获并处理IllegaTriangleException异常
16.       System.out.println(ex.toString());//显示异常信息
17.       System.out.println("请重新输入:");
18.     }
19.   }val.close();//关闭对象
20. }}
21. class IllegaTriangleException extends Exception{
22.   public double a, b, c;//表示3条边长的字段
23.   public IllegaTriangleException (double a,double b,double c) {//构造异常
24.       this.a = a;
25.       this.b = b;
26.       this.c = c;}
27.   public String toString() {//重写toString()方法
28.     return "边长"+a+","+b+","+c+"无法组成有效的三角形";
29.   }
30. }
31. class Triangle{
32.   private double a,b,c;//构造方法
33.   public Triangle (double a,double b,double c)throws IllegaTriangleException{
34.     //在构造方法声明语句中声明可能会抛出的异常类IllegaTriangleException
35.     if(a+b>c&&b+c>a&&a+c>b) {//如果两边之和大于第三边
36.       this.a = a;
37.       this.b = b;
38.       this.c = c;}
39.     else //否则抛出IllegaTriangleException异常
40.       throw new IllegaTriangleException(a,b,c);
41.   }
42.   public double getArea() {//用于计算三角形面积的getArea()方法
43.     double p = (a+b+c)/2.0;
44.     double s = Math.sqrt(p*(p-a)*(p-b)*(p-c));
45.     return s;
46.   }
47. }
目录
相关文章
|
安全 Ubuntu 关系型数据库
Ubuntu下MySQL无法启动和访问的问题解决与修复
Ubuntu下MySQL无法启动和访问的问题解决与修复
1868 1
Ubuntu下MySQL无法启动和访问的问题解决与修复
|
安全 网络安全 数据安全/隐私保护
网络ACL
网络ACL 网络ACL(Access Control List)是一种网络安全机制,用于控制网络中数据流的进出和传递。它基于规则列表,定义了允许或拒绝通过网络设备(如路由器、防火墙)的数据流。 网络ACL通常用于限制或过滤特定类型的流量,以实现对网络资源和服务的保护和管理。它可以根据不同的条件对数据流进行过滤,如源IP地址、目标IP地址、源端口、目标端口、协议类型等。 下面是网络ACL的一些常见应用场景和功能: 1. 访问控制:网络ACL可以设置规则,限制特定IP地址或子网访问某些网络资源。例如,可以设置拒绝来自某个IP地址的所有入站流量,或者只允许特定子网的流量通过。
979 0
抖音直播间刷屏打字发言脚本,全自动弹幕插件发广告插件,按键精灵智能防风控版
这是一款用于直播间批量发送弹幕信息的插件源码,可实现自动刷屏、虚拟欢迎与持续点赞功能。通过预设广告文字和随机话术,模拟真实用户行为以规避风控
|
Java 项目管理 Maven
Java一分钟之-Maven profiles与dependencyManagement
【6月更文挑战第5天】本文探讨了Maven的profiles和dependencyManagement特性在Java项目管理中的应用,包括基本概念和常见问题。Profiles用于根据不同环境激活配置,易错点在于忘记激活,应通过命令行或设置默认profile来避免。dependencyManagement集中管理依赖版本,过度依赖会导致子模块灵活性降低,应合理使用。结合两者,可在不同环境中控制依赖版本,提高项目配置效率。
419 8
|
机器学习/深度学习 分布式计算 DataWorks
MaxCompute产品使用合集之如何对分区表进行合并小文件操作
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
机器学习/深度学习 数据采集 自然语言处理
Python实现支持向量机SVM分类模型(SVC算法)并应用网格搜索算法调优项目实战
Python实现支持向量机SVM分类模型(SVC算法)并应用网格搜索算法调优项目实战
|
移动开发 开发者 HTML5
【专栏】介绍Flexbox和Grid两种现代Web布局技术,它们能帮助开发者创建美观、响应式且兼容性好的界面
【4月更文挑战第27天】本文介绍了Flexbox和Grid两种现代Web布局技术,它们能帮助开发者创建美观、响应式且兼容性好的界面。Flexbox通过主轴和交叉轴实现复杂布局,如垂直居中、响应式和多列布局。Grid布局则利用网格线定义容器和网格项,适用于网格系统和响应式设计。文中以构建响应式Web界面为例,展示了如何结合Flexbox和Grid实现头部、内容区域和底部的布局。
264 5
聊聊自动化测试的度量指标
在聊自动化测试度量指标前,有必要回到做自动化的初衷上,就是为什么要做自动化测试,要解决什么问题。
|
算法 前端开发
详解双端队列&单调队列
详解双端队列&单调队列
|
存储 Java 开发者
为什么建议不要使用Executors来创建线程池?
为什么建议不要使用Executors来创建线程池?
259 0