当前位置: 首页 > news >正文

Java基础异常详解

Java基础异常详解

文章目录

    • Java基础异常详解
      • 编译时异常(Checked Exception):
      • 运行时异常(Unchecked Exception):

Java中的异常是用于处理程序运行时出现的错误或异常情况的一种机制。

异常本身也是一个类。

异常分为两种类型:编译时异常(Checked Exception)和运行时异常(Unchecked Exception)。

编译时异常(Checked Exception):

编译时异常是在代码编译阶段就能够被检测到的异常,程序员必须在代码中显式处理这些异常,否则编译不会通过。常见的编译时异常包括:

  • IOException:输入输出异常,如文件操作中的读写错误。
  • SQLException:数据库访问异常。
  • ClassNotFoundException:类未找到异常。
  • InterruptedException:线程中断异常等。

处理编译时异常的方式:

  • 使用try-catch块捕获异常并处理。

  • 使用throws关键字在方法声明中抛出异常,让调用者处理。

    以下是一些常见的编译时异常的代码示例:

    1. IOException - 输入输出异常

      import java.io.*;public class IOExceptionExample {public static void main(String[] args) {try {FileReader fileReader = new FileReader("file.txt");// 读取文件内容} catch (IOException e) {System.out.println("文件读取发生异常: " + e.getMessage());}}
      }
      
    2. SQLException - 数据库访问异常

      import java.sql.*;public class SQLExceptionExample {public static void main(String[] args) {try {Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");// 执行数据库操作} catch (SQLException e) {System.out.println("数据库操作发生异常: " + e.getMessage());}}
      }
      
    3. ClassNotFoundException - 类未找到异常

      public class ClassNotFoundExceptionExample {public static void main(String[] args) {try {Class.forName("com.example.MyClass");} catch (ClassNotFoundException e) {System.out.println("未找到指定类: " + e.getMessage());}}
      }
      
    4. InterruptedException - 线程中断异常

      public class InterruptedExceptionExample {public static void main(String[] args) {Thread thread = new Thread(() -> {try {Thread.sleep(1000);} catch (InterruptedException e) {System.out.println("线程被中断: " + e.getMessage());}});thread.start();thread.interrupt();}
      }
      

      我们通过使用try-catch块来捕获编译时异常并进行处理。

运行时异常(Unchecked Exception):

运行时异常是在程序运行时才会被抛出的异常,无需在代码中显式处理。如果不处理运行时异常,程序将会终止执行。常见的运行时异常包括:

  • ullPointerException:空指针异常,当尝试访问一个空引用时抛出。

  • ArrayIndexOutOfBoundsException:数组索引越界异常。

  • IllegalArgumentException:非法参数异常,当传递非法参数给方法时抛出。

  • ArithmeticException:算术异常,如除零操作。

  • ClassCastException:类转换异常,当尝试将一个对象强制转换成不兼容的类型时抛出。

运行时异常通常是由程序逻辑错误引起的,因此应该通过代码审查和测试来避免。

以下是一些常见的运行时异常的示例代码:

  1. NullPointerException - 空指针异常:
public class NullPointerExceptionExample {public static void main(String[] args) {String str = null;try {int length = str.length();  // 这里会抛出NullPointerException} catch (NullPointerException e) {System.out.println("发生空指针异常: " + e.getMessage());}}
}
  1. ArrayIndexOutOfBoundsException - 数组索引越界异常:
public class ArrayIndexOutOfBoundsExceptionExample {public static void main(String[] args) {int[] arr = {1, 2, 3};try {int value = arr[5];  // 这里会抛出ArrayIndexOutOfBoundsException} catch (ArrayIndexOutOfBoundsException e) {System.out.println("发生数组索引越界异常: " + e.getMessage());}}
}
  1. IllegalArgumentException - 非法参数异常:
public class IllegalArgumentExceptionExample {public static void main(String[] args) {try {int age = -5;if (age < 0) {throw new IllegalArgumentException("年龄不能为负数");}} catch (IllegalArgumentException e) {System.out.println("发生非法参数异常: " + e.getMessage());}}
}
  1. ArithmeticException - 算术异常:
public class ArithmeticExceptionExample {public static void main(String[] args) {try {int result = 10 / 0;  // 这里会抛出ArithmeticException} catch (ArithmeticException e) {System.out.println("发生算术异常: " + e.getMessage());}}
}
  1. ClassCastException - 类转换异常:
public class ClassCastExceptionExample {public static void main(String[] args) {try {Object obj = "Hello";Integer num = (Integer) obj;  // 这里会抛出ClassCastException} catch (ClassCastException e) {System.out.println("发生类转换异常: " + e.getMessage());}}
}

异常处理的方法:

  • try-catch语句块:使用try-catch块捕获异常并在catch块中进行处理。
try {// 可能抛出异常的代码
} catch (ExceptionType e) {// 异常处理代码
}
  • throws关键字:在方法声明中使用throws关键字抛出异常,让调用者处理。
public void methodName() throws ExceptionType {// 方法体
}
  • finally块:finally块中的代码无论是否发生异常都会被执行,常用于资源的释放等操作。
try {// 可能抛出异常的代码
} catch (ExceptionType e) {// 异常处理代码
} finally {// 最终执行的代码,如关闭文件等
}

异常处理有助于使程序更健壮,能够更好地应对各种异常情况。在处理异常时,应根据具体情况选择合适的处理方式,以保证程序的正确性和稳定性。

http://www.lryc.cn/news/114627.html

相关文章:

  • vue3+vue-i18n 监听语言的切换
  • 【考研复习】24王道数据结构课后习题代码|2.3线性表的链式表示
  • 娇滴滴的一朵花(Python实现)
  • Android AccessibilityService研究
  • 华为OD机试(含B卷)真题2023 算法分类版,58道20个算法分类,如果距离机考时间不多了,就看这个吧,稳稳的
  • JMeter命令行执行+生成HTML报告
  • 学习Boost二:从附录3来看编码习惯
  • STM32基础入门学习笔记:核心板 电路原理与驱动编程
  • 最后一次模拟考试题解
  • Mac 创建和删除 Automator 工作流程,设置 Terminal 快捷键
  • 2023华为OD机试真题B卷 Java 实现【最长的元音串】
  • 网络防御之传输安全
  • 【css】组合器
  • HTTPS、TLS加密传输
  • docker frp 搭建 http + stcp 代理
  • 项目出bug,找不到bug,如何拉回之前的版本
  • vue-cli
  • android获取屏幕分辨率的正确方法;获取到分辨率(垂直方向像素)的不正确
  • 机器学习笔记之优化算法(八)简单认识Wolfe Condition的收敛性证明
  • 通过win+r安装jupyter报错
  • C#声明一个带返回值的委托
  • Flutter 自定义view
  • Ubuntu新装系统报错:sudo: vim:找不到命令
  • Vue3自定义简单的Swiper滑动组件-触控板滑动鼠标滑动左右箭头滑动-demo
  • 三个主流数据库(Oracle、MySQL和SQL Server)的“单表造数
  • TypeScript 中【class类】与 【 接口 Interfaces】的联合搭配使用解读
  • JavaWeb 手写Tomcat底层机制
  • Gof23设计模式之组合模式
  • 龙芯积极研发二进制翻译,提升软硬件兼容性,提高LoongArch架构
  • 3天爆肝整理,自动化测试-YAML文件读写实战(超细总结)