java常见异常及解决方法

1.ArithmeticException算术异常

image
是因为在 Java 中尝试执行除以零的操作导致的,Java 不允许整数类型的变量进行除以零的操作,因为数学上这是没有定义的。当程序试图执行这样的操作时,JVM 将抛出一个 ArithmeticException 异常。

解决方法:
1.通过if条件检查除数

if (divisor != 0) {
    int result = dividend / divisor;
} else {
    System.out.println("Error: Division by zero is not allowed.");
}

2.使用 try-catch 块捕获异常

try {
    int result = dividend / divisor;
} catch (ArithmeticException e) {
    System.out.println("Error: An arithmetic exception occurred - " + e.getMessage());
}

2.ArrayIndexOutOfBoundsException数组下标越界异常

image
是因为在 Java 中尝试访问数组时,索引超出了数组的有效范围。
解决方法:

if (index >= 0 && index < array.length) {
    int value = array[index];
    System.out.println("Value at index " + index + ": " + value);
}

3.NullPointerException空指针异常

image

是因为在 Java 中尝试调用一个 null 对象的方法导致的。具体来说,尝试在一个尚未初始化的对象上调用方法,这会导致 NullPointerException。所以要增强代码的健壮性

解决方法:

 if(StringUtils.isBlank(dto.getName()) || StringUtils.isBlank(dto.getPassword())){
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"用户名或密码为空");
     }

4.ClassCastException类型转换异常

image
我这里是因为在 Java 中尝试将一个 Object 类型的对象强制转换为 String 类型,但该对象实际上并不是 String 类型的。这种类型转换错误会导致 ClassCastException。这种异常非常常见通常发生在类型转换,前后端数据传输时
解决方法:
具体要看什么类型的数据,根据数据类型去解决这里不再过多赘述

5.StackOverflowError栈内存溢出错误

image
是因为在 Java 中发生了栈溢出错误。这种错误通常是由无限递归引起的,即一个方法不断地调用自身,直到栈空间耗尽。
解决方法:
添加终止条件

public class TestError {
    public static void m(int n) {
        if (n <= 0) {
            return; // 终止条件
        }
        System.out.println("n = " + n);
        m(n - 1); // 递归调用
    }

    public static void main(String[] args) {
        m(5); // 调用递归方法
    }
}

6.InputMismatchException输入不匹配

image
解决方法:
使用异常处理机制

import java.util.Scanner;
import java.util.InputMismatchException;

public class TestException {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int number = 0;

        while (true) {
            try {
                System.out.println("请输入一个整数:");
                number = scanner.nextInt();
                break; // 如果输入正确,跳出循环
            } catch (InputMismatchException e) {
                System.out.println("输入错误,请输入一个整数!");
                scanner.next(); // 清除错误的输入
            }
        }

        System.out.println("你输入的整数是:" + number);
    }
}

7.401权限不足报错

image
该类异常通常发生在接口测试调用时,没有足够的权限进行访问
解决方法:
image
设置全局参数密钥

8.文件未找到异常

image
当使用 FileInputStream 或其他文件输入类尝试读取一个不存在的文件时,会抛出这个异常。
解决方法:
查看文件存在与否

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class FileNotFoundExceptionExample {
    public static void main(String[] args) {
        File file = new File("nonexistentfile.txt");
        if (!file.exists()) {
            System.out.println("文件不存在,请检查文件路径是否正确。");
        } else {
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(file);
                // 读取文件内容的代码
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (fis != null) {
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

9.类未找到异常ClassNotFoundException

image
主要是因为尝试加载一个不存在的类报错发生
解决方法:
检查类的存在与否。

10.并发修改异常

image
当在进行迭代操作时,试图并发修改集合(如ArrayList)的结构时,会抛出ConcurrentModificationException异常
解决方法:
1.避免在迭代时修改集合的结构。可以使用Iterator进行迭代,并使用Iterator的remove()方法删除元素,或者创建一个临时副本进行修改操作。

List<String> list = new ArrayList<>();
list.add("Java");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (item.equals("Java")) {
        iterator.remove();
    }
}

2.避免在迭代时修改集合的结构。可以使用Iterator进行迭代,并使用Iterator的remove()方法删除元素,或者创建一个临时副本进行修改操作。

List<String> list = new ArrayList<>();
list.add("Java");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (item.equals("Java")) {
        iterator.remove();
    }
}

11.时间格式化异常DateTimeParseException

image
当尝试将字符串解析为日期或时间时,如果字符串格式与指定的格式不匹配,会抛出DateTimeParseException异常
解决方法:
确保提供的字符串符合指定的日期或时间格式。可以使用DateTimeFormatter指定解析格式,并使用try-catch块来捕获并处理解析异常。

String dateStr = "2023-07-20";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
try {
    LocalDate date = LocalDate.parse(dateStr, formatter);
    // 进一步处理
} catch (DateTimeParseException e) {
    e.printStackTrace();
}

12.数据库访问异常 SQLException

Exception in thread "main" java.sql.SQLException: Connection refused: connect
    at java.sql.DriverManager.getConnection(DriverManager.java:645)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at com.itheima.d1.DatabaseAccessExample.main(DatabaseAccessExample.java:15)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at java.sql.DriverManager.getConnection(DriverManager.java:622)
    ... 2 more

解决方法:
检查你的sql语句和yaml数据库配置

posted @ 2024-10-20 21:23  码字的小猪  阅读(221)  评论(1编辑  收藏  举报
/*粒子线条,鼠标移动会以鼠标为中心吸附的特效*/