首页 > 编程语言 >java常见异常及解决方法

java常见异常及解决方法

时间:2024-10-20 21:24:07浏览次数:6  
标签:Java iterator 常见 System java net 异常

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数据库配置

标签:Java,iterator,常见,System,java,net,异常
From: https://www.cnblogs.com/SpringJerry/p/18487921

相关文章

  • java常见异常
    java常见异常1.NullPointerException(空指针异常)在发现空指针或易产生的地方进行非空判断用Optional类来处理判空2.ArrayIndexOutOfBoundsException(数组越界异常)在访问数组元素前,确保索引值在有效范围内。使用循环时,仔细检查边界条件3.ClassCastException(类型转......
  • 常见异常及解决方法
    一、NullPointerException空指针异常,常见于:入参。从客户端传来的参数,在未进行校验的情况下传入方法当中,其本身为null或其为对象时某些属性为null,进入方法后参与了方法的运行,导致程序出错。Sql语句返回值。从sql语句中返回的值,有null的可能性,当作参数传入方法时容易造成空指针......
  • java中10个常见的异常及其解决方案
    NullPointerException:空指针异常原因:尝试访问一个空对象的成员或方法。解决方案:确保在使用对象之前它们已经被正确初始化了。可以使用Objects.requireNonNull()来检查关键对象是否为空。ArrayIndexOutOfBoundsException:数组下标越界异常原因:试图访问数组的一个不存在的索......
  • Java常见异常,出现原因和解决方法
    java.lang.ArithmeticException算术运算异常,例如除数为0,所以引发了算数异常Java.lang.StringIndexOutOfBoundsException:这是截取字符串substring()产生的下标越界异常。原因是可能是字符串为空,或长度不足1Java.lang.NullPointerException空指针异常出现该异常的原因在于某......
  • Java常见的10个异常
    1.NullPointerException空指针异常,当操作一个null对象的方法或属性时会抛出这个异常。是一个很头疼的异常,因为它是运行时异常,不需要手动捕获,但运行时碰到这个异常会中断程序。2.OutOfMemoryError内存溢出异常,这不是程序能控制的,当需要分配的对象的内存超出了当前最大的堆内......
  • java真的正在越来越失去竞争力了吗
    题记:java真的在越来越失去竞争力了吗?最近参加校招面试,过程中有问道java的问题,有的同学很直接了当(或者是不假思索)地说,java已经过时了吧,现在学java的人越来越少了。那么事实真的这样的吗,今天这篇博文咱们就来客观地谈一谈。我不知道该如何去定义“越来越”这个词,咱们用数据说......
  • java异常相关
    java中有定义很多异常,而且列举异常这也是java面试中的常见的问题在java中我见过的比较多的异常粗略列举10个:1首先是java中最常见的异常:NPE(NullPointException)在各种传参和解析的操作都有可能存在。一般的应对的方法就是做参数校验;2其次是另一个出现的比较的多的:ClassCastE......
  • java中常见的异常以及解决方法
    Java的异常体系是基于类java.lang.Throwable的。它有两个重要的子类:java.lang.Exception和java.lang.Error下图是java异常体系的基本结构:1、Throwable所有异常和错误的超类。有两个主要的子类:Exception和Error。2、Error>表示JVM无法处理的错误情况,通常是致命的,比如Ou......
  • 常见的运行时异常
    NullPointerException:当尝试访问一个空对象的成员或方法时抛出。解决方法:1、使用Objects.requireNonNull方法来提前抛出异常。2、使用Java8的Optional类来避免null值。3、在访问对象之前检查是否为null。ArrayIndexOutOfBoundsException:当试图访问数组中的一个不存在......
  • java 常见异常,及解决方案
    异常体系图常见异常:1、NullPointerException空指针异常:访问一个空对象的属性或者方法时会出现解决:提前进行判空处理2、IOExceptionIO流异常:IO,即:input,output,在读写磁盘文件、网络内容的时候经常会生的一种异常解决:捕获IOException并处理或重新抛出3、ClassNotFoundExc......