首页 > 编程语言 >23.10.18 Java当中的异常处理

23.10.18 Java当中的异常处理

时间:2023-10-18 21:45:00浏览次数:55  
标签:23.10 Java 受检 处理 18 try file catch 异常

Java当中的异常处理

在Java中,异常是指在程序执行期间发生的错误或异常情况,可以分为两种类型:受检异常(Checked Exception)和非受检异常(Unchecked Exception)。

  1. 受检异常:受检异常是指需要在代码中显式处理的异常,通常继承自Exception类的子类。例如,IOExceptionSQLException是受检异常的典型代表。处理受检异常的方式是使用try-catch块或在方法签名中使用throws关键字声明。

  2. 非受检异常:非受检异常是指继承自RuntimeException的异常,通常是编程错误导致的异常,如NullPointerExceptionArrayIndexOutOfBoundsException。非受检异常不需要显式处理,但最好通过编码实践来避免它们的发生。

下面,我们将讨论一些常见的异常情况和如何处理它们。

1. NullPointerException(空指针异常)

NullPointerException是最常见的异常之一,通常发生在尝试访问一个空对象的属性或调用一个空对象的方法时。为了避免它,可以使用条件语句来检查对象是否为空,或者使用可空注解来增强代码的安全性。

String str = null; 
if (str != null) {
   int length = str.length(); // 检查空引用 
}

2. ArrayIndexOutOfBoundsException(数组下标越界异常)

ArrayIndexOutOfBoundsException发生在试图访问数组中不存在的索引时。为了避免它,应该确保索引在有效范围内。

int[] numbers = {1, 2, 3}; 
int index = 5; 
if (index >= 0 && index < numbers.length) { 
  int value = numbers[index]; // 避免数组下标越界
}

3. ArithmeticException(算术异常)

ArithmeticException通常在除以零或模零操作时抛出。为了避免它,应在进行这些操作之前进行检查。

int dividend = 10; 
int divisor = 0; 
if (divisor != 0) { 
    int result = dividend / divisor; // 避免除以零
}

4. IOException(输入/输出异常)

IOException是处理文件操作和网络通信时常见的异常。通常需要在try-catch块中捕获它们,或者使用throws关键字将异常传递给调用者。

try {
     FileInputStream file = new FileInputStream("file.txt");// 读取文件内容 
    file.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
}

5. SQLException(数据库异常)

SQLException是与数据库操作相关的异常,通常需要使用try-catch块来处理。

try {
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password"); // 执行数据库操作 
    conn.close(); 
} catch (SQLException e) { 
    e.printStackTrace(); 
}

6. ClassNotFoundException(类未找到异常)

ClassNotFoundException在尝试加载不存在的类时抛出。通常需要使用try-catch块来捕获它。

try { 
    Class<?> clazz = Class.forName("com.example.MyClass"); // 使用加载的类 
} catch (ClassNotFoundException e) { 
    e.printStackTrace(); 
}

7. Custom Exceptions(自定义异常)

有时,我们需要创建自定义异常类来处理特定的异常情况。自定义异常类应该继承自Exception或其子类,并提供适当的构造函数。

class MyCustomException extends Exception {
     public MyCustomException(String message) {
     super(message); 
    } 
}

然后,可以在代码中抛出自定义异常,并在需要时使用try-catch块捕获它们。

try {
     // 检查某种条件 if (conditionIsMet) {
     throw new MyCustomException("自定义异常消息"); 
} 
} catch (MyCustomException e) {
     e.printStackTrace(); 
}    

8. Finally块

除了try-catch块外,还可以使用finally块来执行无论是否发生异常都需要执行的清理操作。例如,关闭文件、释放资源等。

FileInputStream file = null; 
try { 
    file = new FileInputStream("file.txt"); // 读取文件内容 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    try { 
        if (file != null) {
             file.close(); 
        } 
    } catch (IOException e) {
     e.printStackTrace(); 
}  

9. 使用多个catch块

在同一个try块中,可以使用多个catch块来捕获不同类型的异常,并采取不同的处理措施。

try { 
    // 一些可能引发异常的代码 
} catch (IOException e) {
     // 处理IO异常 
} catch (SQLException e) {
     // 处理数据库异常 
} catch (Exception e) {
     // 处理其他异常 
}

使用适当的异常处理方法可以提高程序的可靠性和健壮性。在编写代码时,应根据具体情况选择合适的异常处理策略,确保程序在出现异常时能够进行适当的处理,提高用户体验和程序的稳定性。

标签:23.10,Java,受检,处理,18,try,file,catch,异常
From: https://www.cnblogs.com/qmz-znv2/p/17773416.html

相关文章

  • 比赛经验(10/18)
     (1)有些比赛问题可以用公式直接计算,仔细辨别,不要盲目计算 (2)注重时间复杂度的分析,估算时间,选择合适的算法或者其他解题方式   时间复杂度 (3)对于出错的题目先跳过,一直提交可能会蒙圈,返回来再写时可能会清晰些......
  • HO引擎近况20231018
    放完假就开始忙现在又开始晚上9点下班了,一直到现在才想起来写博客公司搬家了。搬到了原来公司附近的写字楼里面工作环境变了,算是有好有坏吧好处是当初排座位的时候我要了一个靠过道的位置,现在看来还真的不错能把小柜子放到桌子外面的过道上一部分,还能放两个小柜子不靠窗户所......
  • 20231018打卡
    上午,我们进行了一次听写练习。这是一项对我们英语听力和拼写能力的考验。我在经过认真准备后,感觉状态非常好,成功地完成了听写。这让我感到很有成就感,同时也对自己的英语学习有了更大的信心。下午,为了放松自己,我和几个朋友一起去打篮球。我们组成了一个3V3的篮球队,这次打篮球让我......
  • 拓扑排序(10/18)
    拓扑排序https://raelum.blog.csdn.net/article/details/129650604?ydreferer=aHR0cHM6Ly93d3cuYWN3aW5nLmNvbS9hY3Rpdml0eS9jb250ZW50L2NvZGUvY29udGVudC80NzEwNi8%3D #include<cstring>#include<iostream>#include<algorithm>usingnamespacestd;......
  • 10.18日记
    //给每个主节点添加点击事件监听器mainNodes.forEach(mainNode=>{  mainNode.addEventListener('click',(e)=>{    //阻止默认链接行为    e.preventDefault();    //切换子菜单的显示状态    constsubMenu=mainNode.next......
  • 在JavaScript中,`!!`(不是not)操作符的作用是什么?
    内容来自DOChttps://q.houxu6.top/?s=在JavaScript中,!!(不是not)操作符的作用是什么?我看到了一些代码,似乎使用了我不知道的操作符,形式为两个感叹号,就像这样:!!。有人能告诉我这个操作符是做什么的吗?我看到这个操作符的上下文是:this.vertical=vertical!==undefined?!!ver......
  • javacv入门
    第一章:javacv介绍了解javacv的历史和发展背景JavaCV是一个开源的Java框架,它提供了基于Java的接口,用于访问各种计算机视觉库和工具包,如OpenCV、FFmpeg等。JavaCV旨在为Java开发人员提供快速、简单和可靠的图像和视频处理能力。JavaCV的历史可以追溯到2007年,当时一个名为“JavaCP......
  • 10.18
    今日代码:200行今日时间:4小时学习内容:今天做了软件构造的作业小学数学题的编程MathPaper.javapackagecom.stdu.www; importjava.util.ArrayList;importjava.util.List; publicclassMathPaper{  privateList<MathQuestion>questions;   publicMathP......
  • docker入门加实战—部署Java和前端项目
    docker入门加实战—部署Java和前端项目部署之前,先删除nginx,和自己创建的dd两个容器:dockerrm-fnginxdd部署Java项目作为演示,我们的Java项目比较简单,提供了一个接口:配置文件连接docker里的mysql:打包如下:DockerFIle文件如下:#基础镜像FROMopenjdk:11.0-jre-buster......
  • 《Java 8实战》PDF高清高质量电子书
    下载:https://pan.quark.cn/s/c6c7603af158......