Java异常处理练习题详解:代码实现与运行结果分析
1. 捕获并处理数组越界异常
问题分析
数组越界异常(ArrayIndexOutOfBoundsException
)是当程序试图访问数组的无效索引时抛出的异常。例如,访问数组的第n
个元素,而数组的长度小于n
。
代码实现
public class ArrayIndexOutOfBoundsExceptionExample {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};
try {
System.out.println("数组的第6个元素是:" + array[5]); // 索引从0开始,数组越界
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("捕获到数组越界异常:" + e.getMessage());
}
}
}
运行结果
捕获到数组越界异常:Index 5 out of bounds for length 5
2. 捕获并处理除以零的异常
问题分析
除以零的异常(ArithmeticException
)是当程序试图进行除以零的操作时抛出的异常。
代码实现
public class ArithmeticExceptionExample {
public static void main(String[] args) {
int a = 10;
int b = 0;
try {
System.out.println("a除以b的结果是:" + (a / b));
} catch (ArithmeticException e) {
System.out.println("捕获到除以零的异常:" + e.getMessage());
}
}
}
运行结果
捕获到除以零的异常:/ by zero
3. 捕获并处理输入格式异常
问题分析
输入格式异常(InputMismatchException
)是当程序试图从输入流中读取与预期格式不匹配的数据时抛出的异常。例如,从控制台读取一个整数,但用户输入了字符串。
代码实现
import java.util.Scanner;
import java.util.InputMismatchException;
public class InputMismatchExceptionExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
try {
int number = scanner.nextInt();
System.out.println("输入的整数是:" + number);
} catch (InputMismatchException e) {
System.out.println("捕获到输入格式异常:" + e.getMessage());
} finally {
scanner.close();
}
}
}
运行结果
如果输入abc
:
请输入一个整数:
abc
捕获到输入格式异常:Input mismatch
4. 自定义异常类MyException
并抛出该异常
问题分析
自定义异常类需要继承Exception
或其子类。通过throw
关键字可以手动抛出自定义异常。
代码实现
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
public class CustomExceptionExample {
public static void main(String[] args) {
try {
throw new MyException("这是一个自定义异常");
} catch (MyException e) {
System.out.println("捕获到自定义异常:" + e.getMessage());
}
}
}
运行结果
捕获到自定义异常:这是一个自定义异常
5. 捕获并处理文件不存在异常
问题分析
文件不存在异常(FileNotFoundException
)是当程序试图打开一个不存在的文件时抛出的异常。
代码实现
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class FileNotFoundExceptionExample {
public static void main(String[] args) {
File file = new File("test.txt");
try {
FileInputStream fis = new FileInputStream(file);
System.out.println("文件存在,可以正常读取");
} catch (FileNotFoundException e) {
System.out.println("捕获到文件不存在异常:" + e.getMessage());
}
}
}
运行结果
如果文件test.txt
不存在:
捕获到文件不存在异常:test.txt (系统找不到指定的文件。)
6. 捕获并处理空指针异常
问题分析
空指针异常(NullPointerException
)是当程序试图访问一个null
对象的成员时抛出的异常。
代码实现
public class NullPointerExceptionExample {
public static void main(String[] args) {
String str = null;
try {
System.out.println("字符串的长度是:" + str.length());
} catch (NullPointerException e) {
System.out.println("捕获到空指针异常:" + e.getMessage());
}
}
}
运行结果
捕获到空指针异常:Cannot invoke "String.length()" because "str" is null
7. 捕获并处理多个异常
问题分析
可以使用多个catch
块来捕获不同类型的异常,也可以使用|
符号在一个catch
块中捕获多个异常。
代码实现
public class MultipleExceptionExample {
public static void main(String[] args) {
try {
int[] array = {1, 2, 3};
System.out.println(array[3]); // 数组越界异常
int result = 10 / 0; // 除以零异常
} catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {
System.out.println("捕获到异常:" + e.getMessage());
}
}
}
运行结果
捕获到异常:Index 3 out of bounds for length 3
8. 使用try-with-resources
语句处理文件输入输出流
问题分析
try-with-resources
语句可以自动关闭实现了AutoCloseable
接口的资源,避免资源泄漏。
代码实现
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class TryWithResourcesExample {
public static void main(String[] args) {
String filePath = "test.txt";
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("捕获到IO异常:" + e.getMessage());
}
}
}
运行结果
如果文件test.txt
存在并包含内容:
文件内容
如果文件不存在:
捕获到IO异常:test.txt (系统找不到指定的文件。)
9. 捕获并处理NumberFormatException
问题分析
NumberFormatException
是当程序试图将字符串转换为数字,但字符串格式不正确时抛出的异常。
代码实现
public class NumberFormatExceptionExample {
public static void main(String[] args) {
String str = "abc";
try {
int number = Integer.parseInt(str);
System.out.println("转换后的数字是:" + number);
} catch (NumberFormatException e) {
System.out.println("捕获到数字格式异常:" + e.getMessage());
}
}
}
运行结果
捕获到数字格式异常:For input string: "abc"
10. 捕获并处理IOException
问题分析
IOException
是输入输出异常的基类,包括文件操作、网络操作等可能抛出的异常。
代码实现
import java.io.FileInputStream;
import java.io.IOException;
public class IOExceptionExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("test.txt")) {
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
System.out.println("捕获到IO异常:" + e.getMessage());
}
}
}
运行结果
如果文件test.txt
存在并包含内容:
文件内容
如果文件不存在:
捕获到IO异常:test.txt (系统找不到指定的文件。)