以下列举了几种常见的异常情况
文章目录
1.算术异常 - 除数为零
public class Main {
public static void main(String[] args) {
try {
int result = divide(10, 0);
System.out.println("结果: " + result);
} catch (ArithmeticException e) {//捕获divide的算术错误并打印
System.out.println("算术异常: " + e.getMessage());
}
}
//除法函数
public static int divide(int numerator, int denominator) {
try {
return numerator / denominator;
} catch (ArithmeticException e) {//捕获并抛出算术异常
throw new ArithmeticException("除数不能为零");
}
}
}
输出结果:
算术异常: 除数不能为零
2.空指针异常 - 访问 null 对象的函数方法
public class Main {
public static void main(String[] args) {
try {
//创建一个空的字符串对象
//null 表示一个引用类型的变量不指向任何对象,即空引用
//因此调用与对象相关的方法或操作时会抛出空指针异常
String str = null;
//获取空字符串的长度
int length = str.length();
System.out.println("字符串长度: " + length);
} catch (NullPointerException e) {//捕获空指针异常
System.out.println("空指针异常: " + e.getMessage());
}
}
}
输出结果:
空指针异常: Cannot invoke "String.length()" because "str" is null
3.数组下标越界异常 - 访问无效索引
public class Main {
public static void main(String[] args) {
try {
int[] numbers = {1, 2, 3};
//访问越界数组索引位置
int value = numbers[4];
System.out.println("数组元素值: " + value);
} catch (ArrayIndexOutOfBoundsException e) {//捕获数组下标越界异常
System.out.println("数组下标越界异常: " + e.getMessage());
}
}
}
输出结果:
数组下标越界异常: Index 4 out of bounds for length 3
4.文件不存在异常 - 打开或读取不存在的文件
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
// 创建一个File对象,指定文件路径
File file = new File("nonexistent.txt");
// 创建一个Scanner对象用于读取文件内容
Scanner scanner = new Scanner(file);
// 读取文件的下一行内容并输出
System.out.println("文件内容: " + scanner.nextLine());
// 关闭Scanner对象
scanner.close();
} catch (FileNotFoundException e) {
// 捕获文件不存在异常,并输出异常信息
System.out.println("文件不存在异常: " + e.getMessage());
}
}
}
输出结果:
文件不存在异常: nonexistent.txt (系统找不到指定的文件。)
5.格式化异常 - 解析无效的数字格式
public class Main {
public static void main(String[] args) {
try {
// 定义一个字符串
String str = "abc";
// 将字符串解析为整数
int value = Integer.parseInt(str);
// 输出解析结果
System.out.println("解析结果: " + value);
} catch (NumberFormatException e) {
// 捕获格式化异常,并输出异常信息
System.out.println("格式化异常: " + e.getMessage());
}
}
}
输出结果:
格式化异常: For input string: "abc"
6.非法参数异常 - 传递无效的参数值
public class Main {
public static void setAge(int age) {
if (age < 0) {//设置年龄。如果年龄小于0,抛出 IllegalArgumentException 异常
throw new IllegalArgumentException("年龄不能为负数");
}
}
public static void main(String[] args) {
try {
// 调用 setAge 方法设置年龄为负数
setAge(-10);
} catch (IllegalArgumentException e) {
// 捕获非法参数异常,并输出异常信息
System.out.println("非法参数异常: " + e.getMessage());
}
}
}
输出结果:
非法参数异常: 年龄不能为负数
7.类型转换异常 - 无效的类型转换
public class Main {
public static void main(String[] args) {
try {
// 定义一个对象,存储字符串
Object value = "Hello";
// 将对象强制转换为 Integer 类型
Integer number = (Integer) value;
// 输出转换结果
System.out.println("转换结果: " + number);
} catch (ClassCastException e) {
// 捕获类型转换异常,并输出异常信息
System.out.println("类型转换异常: " + e.getMessage());
}
}
}
输出结果:
类型转换异常: class java.lang.String cannot be cast to class java.lang.Integer
8.IOException - 处理文件输入/输出异常
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// 创建一个 File 对象,表示要读取的文件
File file = new File("file.txt");
// 创建一个 FileReader 对象,用于读取文件
FileReader reader = new FileReader(file);
// ... 在此进行文件读取操作
// 关闭 FileReader
reader.close();
} catch (IOException e) {
// 捕获文件读取异常,并输出异常信息
System.out.println("文件读取异常: " + e.getMessage());
}
}
}
输出结果:
文件读取异常: file.txt (系统找不到指定的文件。)
9.SocketException - 处理网络通信异常
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
public class Main {
public static void main(String[] args) {
try {
// 获取 域名csdn.net 的 IP 地址
InetAddress address = InetAddress.getByName("www.csdn.net");
// 创建一个 Socket 对象,指定要连接的主机和端口
//按理应该使用80(http)或443(https)
//为了报异常我这里故意写个81
//愿大家都能在编程领域度过81难取得真经
Socket socket = new Socket(address, 81);
// ... 在此进行网络通信操作
socket.close();
} catch (SocketException e) {
System.out.println("Socket异常: " + e.getMessage());
} catch (IOException e) {
System.out.println("IO异常: " + e.getMessage());
}
}
}
输出结果:
Socket异常: Connection refused: connect
10.SQLException - 处理数据库操作异常
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Main {
public static void main(String[] args) {
try {
//对于现代的 MySQL JDBC 驱动程序来说,通常不需要调用
//所以注释了(作为拓展)
// 注册数据库驱动程序
//Class.forName("com.mysql.jdbc.Driver");
// 设定连接信息(下面这两个参数都加上)
//useSSL=false是去除SSL检查
//serverTimezone=Asia/Shanghai是设置时区
String url = "jdbc:mysql://localhost:3306/szc_db?useSSL=false&serverTimezone=Asia/Shanghai";
String username = "root";
//密码是错的所以会有异常
String password = "1234";
// 建立数据库连接
Connection connection = DriverManager.getConnection(url, username, password);
// ... 在此进行数据库操作
// 关闭数据库连接
connection.close();
} catch (SQLException e) {
System.out.println("数据库操作异常: " + e.getMessage());
}
}
}
输出结果:
数据库操作异常: Public Key Retrieval is not allowed