Java异常处理程序实验
需积分: 0 157 浏览量
更新于2024-02-19
收藏 328KB DOCX 举报
### Java异常处理程序实验知识点详解
#### 一、实验目的
本实验旨在让学习者深入了解Java中的异常处理机制,特别是`try-catch-finally`结构的使用方式,并掌握如何自定义异常类。此外,还将涉及如何在接口实现过程中处理异常。
#### 二、实验内容
##### 1. 使用 `try-catch-finally` 结构实现异常处理
**实验说明**:
此部分要求通过编写一段程序来展示如何使用 `try-catch-finally` 结构来捕获并处理数组越界异常。
**代码解析**:
```java
public class shiyan3_1 {
public static void main(String[] args) {
int i = 0;
String[] greeting = {"Hello", "Only", "Test"};
while (i < 4) {
try {
System.out.println(greeting[i]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界");
} finally {
System.out.println("总会运行");
}
i++;
}
}
}
```
- **主函数**: 定义了一个长度为3的字符串数组 `greeting`。
- **循环**: 循环4次,当循环到第4次时,索引 `i` 的值为3,这将导致数组越界异常。
- **try块**: 尝试执行可能引发异常的代码。
- **catch块**: 捕获由try块引发的特定类型异常,并打印出“数组越界”。
- **finally块**: 无论是否发生异常,都会执行此块中的代码。这里打印“总会运行”。
**运行结果**:
```
Hello
Only
Test
数组越界
总会运行
总会运行
总会运行
总会运行
```
##### 2. 自定义异常类与条件性异常抛出
**实验说明**:
该部分要求自定义一个异常类 `MyException` 并在满足特定条件时抛出异常。
**代码解析**:
```java
public class shiyan3_2 {
static class xyz {
public void test(String X) {
if (X.equals("XYZ")) {
try {
throw new MyException("This is a XYZ,异常!!!!");
} catch (MyException e) {
throw new RuntimeException(e);
}
} else if (!X.equals("ABC")) {
System.out.println("只允许输出 XYZ and ABC");
} else {
System.out.println("正确");
}
}
}
static class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
xyz demo1 = new xyz();
demo1.test(sc.nextLine());
}
}
```
- **自定义异常类**: `MyException` 继承自 `Exception` 类。
- **条件判断**: 当输入字符串为 “XYZ” 时抛出 `MyException`,当输入为 “ABC” 时正常运行,其他情况下提示“只允许输出 XYZ and ABC”。
- **运行流程**:
- 输入 “XYZ” 会抛出异常,并在控制台显示 “This is a XYZ,异常!!!!”。
- 输入 “ABC” 则显示 “正确”。
- 输入非 “XYZ” 或 “ABC” 的其他字符时,显示 “只允许输出 XYZ and ABC”。
**运行结果**:
- 输出 “XYZ” 时抛出异常:
```
This is a XYZ,异常!!!!
```
- 输入 “ABC” 时正常运行:
```
正确
```
- 输入既不是 “XYZ” 也不是 “ABC”:
```
只允许输出 XYZ and ABC
```
##### 3. 接口实现过程中的异常处理
**实验说明**:
这部分要求声明一个 `Average` 接口,并实现多个类来计算不同场景下的平均值。同时,需要处理输入非数值字符串时的异常。
**接口声明**:
```java
interface Average {
double average(double... numbers);
}
```
**示例类**:
```java
class SimpleAverage implements Average {
@Override
public double average(double... numbers) {
if (numbers.length == 0) throw new IllegalArgumentException("No numbers provided.");
return Arrays.stream(numbers).average().orElseThrow(() -> new IllegalArgumentException("Cannot compute average."));
}
}
class RobustAverage implements Average {
@Override
public double average(double... numbers) {
if (numbers.length < 2) throw new IllegalArgumentException("Not enough numbers to compute robust average.");
double max = Arrays.stream(numbers).max().getAsDouble();
double min = Arrays.stream(numbers).min().getAsDouble();
double sum = Arrays.stream(numbers).filter(n -> n != max && n != min).sum();
return sum / (numbers.length - 2);
}
}
```
- **SimpleAverage** 类实现了简单的平均值计算逻辑。
- **RobustAverage** 类实现了去除最大值和最小值后的平均值计算逻辑。
**异常处理**:
在读取用户输入时,需要确保输入可以被转换为数字。可以通过以下方式实现:
```java
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Double> numbers = new ArrayList<>();
while (scanner.hasNext()) {
try {
String input = scanner.next();
double num = Double.parseDouble(input);
numbers.add(num);
} catch (NumberFormatException e) {
System.out.println("无效输入,请输入数字。");
}
}
// 计算平均值...
}
```
- **循环读取输入**:使用 `Scanner` 读取用户输入。
- **异常捕获**:当输入无法转换为数字时,捕获 `NumberFormatException` 并提示用户重新输入。
Learning岛主
- 粉丝: 795
- 资源: 11
最新资源
- 毕设和企业适用springboot智能云服务平台类及物流信息平台源码+论文+视频.zip
- 毕设和企业适用springboot智能云服务平台类及用户体验优化平台源码+论文+视频.zip
- 毕设和企业适用springboot智能云服务平台类及员工管理平台源码+论文+视频.zip
- 毕设和企业适用springboot智能云服务平台类及智能农业解决方案源码+论文+视频.zip
- 毕设和企业适用springboot智能云服务平台类及智能语音助手平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造类及车联网管理平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造类及互联网金融平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造类及个性化推荐平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造类及机器学习平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造类及交通信息平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造类及健康风险评估平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造类及企业管理智能化平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造类及旅游数据平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造类及企业培训平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造类及视觉识别平台源码+论文+视频.zip
- 毕设和企业适用springboot智能制造类及数字营销平台源码+论文+视频.zip