Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >干货!JAVA常见异常汇总

干货!JAVA常见异常汇总

作者头像
灬沙师弟
发布于 2024-10-23 06:28:20
发布于 2024-10-23 06:28:20
33000
代码可运行
举报
文章被收录于专栏:Java面试教程Java面试教程
运行总次数:0
代码可运行

正如“人无完人”一样,程序也不是完美的,它总会存在这样那样的问题,如果忽视它,可能就会造成程序的终止,甚至是系统的崩溃。异常是指程序在执行过程中,出现的非正常情况,可能由程序员错误、系统错误或用户输入错误引起。

Java 使用面向对象的方式来表示和处理这些错误,JAVA中的异常继承自 java.lang.Throwable 类,主要分为两类:

  • 编译时期异常:checked异常。这些异常通常是由于外部因素(如文件不存在、网络断开等)引起的,程序无法自行解决,必须显式捕获并处理。如果没有处理异常,则编译失败。
  • 运行时期异常:runtime异常。运行时异常,不强制要求处理。通常是编程错误引起的(如空指针、数组越界等)。

Java 提供了结构化的异常处理机制,可以通过 try-catch-finally 语句来捕获和处理异常,避免程序崩溃:

  • try 块:包含可能抛出异常的代码。
  • catch 块:用来捕获和处理异常。如果在 try 块中抛出了异常,程序的控制权将传递给 catch 块。
  • finally 块(可选):无论是否发生异常,finally 块中的代码总会执行,通常用于释放资源(如关闭文件、释放数据库连接等)。

下面汇总一些常见异常类型及处理方法:

  1. ClassCastException (类型转换异常)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当试图将对象强制转换为不兼容的类型时抛出此异常。
Object x = new Integer(0);
    System.out.println((String)x); // 会抛出 ClassCastException

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:在类型转换之前使用 instanceof 关键字检查对象是否属于某个特定类型。。
if (x instanceof String) {
    String s = (String) x;
} else {
    // 处理类型不匹配的情况
}
  1. ClassNotFoundException (未找到相关类异常)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当尝试通过类的名字加载类,但找不到类时抛出此异常。
try {
    Class.forName("com.example.UnknownClass");
} catch (ClassNotFoundException e) {
    e.printStackTrace(); // 会抛出 ClassNotFoundException
}

处理方法:确保引用的类存在于正确的位置,并且类路径设置正确。如果使用外部库或框架,确保将相关的jar文件添加到类路径中。

  1. ArithmeticException (算术异常)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当出现异常的算术操作时,例如除以零。
int result = 10 / 0; // 会抛出 ArithmeticException

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:在进行除法或取模运算时,要确保除数不为零,可以使用条件语句预先检查除数是否为零。
if (b != 0) {
    int result = a / b;
    // 进一步处理
}
  1. ArrayIndexOutOfBoundsException (数组下标越界异常)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当试图访问数组中不存在的索引时抛出此异常。
int[] arr = new int[5];
int value = arr[10]; // 会抛出 ArrayIndexOutOfBoundsException

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:确保访问数组时,索引值在有效范围内。要注意Java数组的索引从0开始,因此最大索引是数组长度减1。
if (index >= 0 && index < arr.length) {
    int element = arr[index];
    // 进一步处理
}

5.ArrayStoreException (数组存储异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当试图将错误类型的对象存储到对象数组中时抛出此异常。
Object[] array = new String[5];
array[0] = 1; // 会抛出 ArrayStoreException

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当试图将错误类型的对象存储到对象数组中时抛出此异常。
Object[] array = new String[5];
try {
    array[0] = 1; // 这个地方抛出 ArrayStoreException
} catch (ArrayStoreException e) {
    System.out.println("类型不匹配");
}

6.SQLException (操作数据库异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当操作数据库时,发生访问数据库错误或违反 SQL 语法时抛出此异常。
try {
    Connection conn = DriverManager.getConnection(url, username, password);
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM users");
    // 处理结果集
} catch (SQLException e) {
    e.printStackTrace();
}

处理方法:在进行数据库操作时,应注意处理可能发生的SQLException异常。可以使用try-catch语句块捕获异常,并根据具体情况进行错误处理,如打印错误信息、关闭资源或进行事务回滚。

7.NullPointerException (空指针异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当应用程序试图在空对象上调用方法或访问空对象的字段时抛出此异常。

String str = null;
str.length(); // 会抛出 NullPointerException

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:在使用对象之前检查是否为空 (null),避免调用空对象的方法或属性,使用 Optional 类来避免空指针异常。
String str = null;
if (str != null) {
    System.out.println(str.length());
} else {
    System.out.println("对象为空");
}

8.NoSuchFieldException (字段未找到异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当类不存在指定字段时抛出此异常。

try {
    Field field = String.class.getField("unknownField");
} catch (NoSuchFieldException e) {
    e.printStackTrace(); // 会抛出 NoSuchFieldException
}

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:捕获异常并处理,如提供备用字段或默认行为。
try {
    Field field = String.class.getField("unknownField");
} catch (NoSuchFieldException e) {
    System.out.println("字段未找到");
}

9.NoSuchMethodException (方法未找到异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当方法在类中不存在时抛出此异常。

try {
    Method method = String.class.getMethod("unknownMethod");
} catch (NoSuchMethodException e) {
    e.printStackTrace(); // 会抛出 NoSuchMethodException
}

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:捕获异常并提供备用处理逻辑。
try {
    Method method = String.class.getMethod("unknownMethod");
} catch (NoSuchMethodException e) {
    System.out.println("方法未找到");
}

10.NumberFormatException (数字格式化异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当应用程序试图将字符串转换为数字,但该字符串无法解析为有效数字时抛出此异常。
String numberStr = "ABC123";
int number = Integer.parseInt(numberStr);

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:在进行字符串转换为数字的操作之前,确保字符串仅包含有效的数字字符。可以使用正则表达式或合适的校验方法来验证字符串是否为有效的数字。
String numberStr = "123";
if (numberStr.matches("\\d+")) {
    int number = Integer.parseInt(numberStr);
    // 进一步处理
}

11.NegativeArraySizeException (数组大小为负异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当试图创建大小为负的数组时抛出此异常。
int[] array = new int[-5]; // 会抛出 NegativeArraySizeException

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:捕获异常并提示数组大小错误。
    try {
        int[] array = new int[-5];
    } catch (NegativeArraySizeException e) {
        System.out.println("数组大小不能为负");
    }

12.StringIndexOutOfBoundsException (字符串下标越界异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当访问字符串中不存在的索引时抛出此异常。
String str = "hello";
char ch = str.charAt(10); // 会抛出 StringIndexOutOfBoundsException

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:捕获异常并提示字符串越界。
    String str = "hello";
    try {
        char ch = str.charAt(10);
    } catch (StringIndexOutOfBoundsException e) {
        System.out.println("字符串索引越界");
    }

13.IOException (输入输出异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:与 I/O 操作相关的异常,当读写文件或网络时出现错误抛出此异常。
FileReader fr = new FileReader("non_existent_file.txt"); // 会抛出 IOException

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:捕获异常并记录错误日志。
    try {
        FileReader fr = new FileReader("non_existent_file.txt");
    } catch (IOException e) {
        System.out.println("文件读取错误");
    }

14.IllegalAccessException (非法访问异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当试图访问类或方法时,没有访问权限时抛出此异常。
class Test {
    private void privateMethod() {}
}

try {
    Method method = Test.class.getDeclaredMethod("privateMethod");
    method.invoke(new Test()); // 会抛出 IllegalAccessException
} catch (IllegalAccessException e) {
    e.printStackTrace();
}

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:捕获异常并进行提示。
    try {
        Method method = Test.class.getDeclaredMethod("privateMethod");
        method.invoke(new Test());
    } catch (IllegalAccessException e) {
        System.out.println("非法访问");
    }

15.InstantiationException (实例化异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:如尝试实例化抽象类抛出此异常。
abstract class Animal {
    public abstract void sound();
}

public class Test {
    public static void main(String[] args) {
        try {
            Animal animal = Animal.class.newInstance(); // 会抛出 InstantiationException
        } catch (InstantiationException | IllegalAccessException e) {
            System.out.println("无法实例化抽象类: " + e);
        }
    }
}

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:可以通过创建具体子类来避免这个异常。
class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Bark");
    }
}

public class Test {
    public static void main(String[] args) {
        try {
            Animal animal = Dog.class.newInstance(); // 实例化具体的子类
            animal.sound(); // 输出 "Bark"
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

16.EOFException (文件结束异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当程序试图读取文件的末尾时抛出此异常。
FileInputStream fis = new FileInputStream("somefile.txt");
while (fis.read() != -1) {
    // 读取文件直到 EOF
}

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:捕获 EOFException,并提供适当的逻辑来处理文件读取完成的情况。
try {
    FileInputStream fis = new FileInputStream("file.txt");
    while (fis.read() != -1) {
        // 读取文件内容
    }
} catch (EOFException e) {
    System.out.println("已到达文件末尾");
} catch (IOException e) {
    e.printStackTrace();
}

17.FileNotFoundException (文件未找到异常)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:当试图打开文件的文件名无效时抛出此异常。
FileReader fr = new FileReader("non_existent_file.txt"); // 会抛出 FileNotFoundException

处理方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//说明:在尝试打开文件之前,先检查文件是否存在,或者捕获 FileNotFoundException 并提示用户文件路径是否正确。
File file = new File("non_existent_file.txt");
if (file.exists()) {
    FileReader fr = new FileReader(file);
} else {
    System.out.println("文件未找到");
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java面试教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
异常类知识详解
ma布
2024/10/21
1890
异常类知识详解
Java异常处理
try 块后面可以接零个或多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块。
Breeze.
2022/04/15
1.2K0
Java异常处理
Java之异常处理
异常是程序中的一些错误,但并不是所有的错误都是异常,也就是在的程序中,不存在所谓的“异常”,只存在错误并且错误有时候是可以避免的。
用户5224393
2019/08/20
9900
Java之异常处理
java学习之路:29.异常处理
学习Java时,常常会遇到编译程序后,提示出现异常,异常时一个在程序执行期间发生的事件,它中断了正在执行的程序的正常指令流。 例如下面的代码:
花狗Fdog
2020/10/28
5110
java学习之路:29.异常处理
Java常用工具之异常
在程序开发中,异常指不期而至的各种状况。它是一个事件,当发生在 程序运行期间时,会干扰正常的指令流程。
慕白
2020/01/02
6620
Java常用工具之异常
JavaSE学习总结(八)—— 异常处理(Exception)
本文介绍了Java中的异常处理机制,包括try、catch、finally、throw、throws等关键字的使用方法和注意事项,以及自定义异常和异常处理类
张果
2018/01/04
1.4K0
JavaSE学习总结(八)—— 异常处理(Exception)
来了!令人头疼的 Java 异常面试总结
从结构图可以看出,所有异常均继承自 Throwable 类,它有两个重要的子类:Exception 和 Error ,各自又包含大量子类。
村雨遥
2021/07/07
6540
【Java ——异常机制详解】
异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。
奥耶可乐冰
2024/05/31
3250
Java 最常见的 208 道面试题:第七模块答案
throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。而throw则是指抛出的一个具体的异常类型。
Java团长
2019/04/25
6810
java异常处理 Exception、error、运行时异常和一般异常有何异同「建议收藏」
对于程序运行过程中的可能出现异常情况,java语言使用一种称为异常处理的错误捕捉机制进行处理。相信大家对 try { }catch( ){} finally{} 这种结构非常熟悉,使用频率极高。既然经常使用它,而且也是面试常问知识点,我们就有必要去深入地了解一下。也谈不上深入,只是java语言的基本功。下面,开始吧!
全栈程序员站长
2022/11/10
4270
java异常处理 Exception、error、运行时异常和一般异常有何异同「建议收藏」
Java 最全异常讲解
实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们的程序再跑着,内存或硬盘可能满了。等等。
帅飞
2019/01/22
5780
Java异常知识汇总
在我们的程序中,任何时候任何地方因为任何原因都有可能会出现异常,在没有异常机制的时候我们是这样处理的:通过函数的返回值来判断是否发生了异常(这个返回值通常是已经约定好了的),调用该函数的程序负责检查并且分析返回值。虽然可以解决异常问题,但是这样做存在几个缺陷:
Abalone
2022/07/14
5950
Java异常知识汇总
Java-异常
Java异常是Java提供的用于处理程序中错误的一种机制。所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在)**并非在编写代码出现的编译时错误(注意:发生异常时,观察错误的名字和行号最重要),设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可遇见的结果。
桑鱼
2020/03/18
6510
04 - JavaSE之异常处理
2.throw new someExpresion("错误原因"); 表示的是手动抛出异常。 **
Daotin
2018/08/31
4770
04 - JavaSE之异常处理
【Java零基础入门篇】第 ⑥ 期 - 异常处理
程序员在写代码的时候即便写的尽善尽美,在系统的运行过程中依据会遇到一些问题,因为很多问题不是靠代码能够避免的。
命运之光
2024/03/20
1640
【Java零基础入门篇】第 ⑥ 期 - 异常处理
Java---异常
3、运算结果没有达到预期结果。 这种问题需要去查看代码逻辑,断点调试,观察变量数据变化。
用户10787181
2023/10/17
2290
Java---异常
Java【8】异常处理
编译错误–因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置;
哲洛不闹
2020/07/02
6500
【Java中常见的异常及其处理方式】
通过查看Structure的结构我们可知:StringBuilder 的的方法基本上可以归为5种,分别是: append,delete,replace,insert,indexOf 其中最关键的是“append”,使用案例如下所示:
ImAileen
2024/12/20
1480
【Java中常见的异常及其处理方式】
Java程序员必备:异常的十个关键知识点
异常是指阻止当前方法或作用域继续执行的问题。比如你读取的文件不存在,数组越界,进行除法时,除数为0等都会导致异常。
捡田螺的小男孩
2020/04/14
9590
java常见异常汇总
在6月的投票中,结果昨天已经出来了,大家多数的希望多推送一些java的基础知识。首先来一下热身,debug模式启动起来.......... 身为一个程序猿,开发过程中(调研--需求--产品-
码神联盟
2018/04/02
1.5K0
java常见异常汇总
相关推荐
异常类知识详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验