【Java】异常处理-概述【主线学习笔记】
文章目录
前言
Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。
异常
在Java中,异常是一种用于处理程序运行时错误的机制。当程序出现错误或异常情况时,Java会抛出一个异常对象,这个对象包含了错误的信息和状态。异常值得并不是语法错误或者逻辑错误。
1、抛出机制
在Java中,异常的抛出机制通过创建异常类的对象并使用throw
语句来实现。当发生特定的异常情况时,Java会生成对应异常类的实例,并将其抛出。然后程序员可以捕获(catch)到止个异常对象,并处理;如果没有捕获(catch)这个异常对象,那么这个异常对象将会导致程序终止。
例如,假设我们要处理一个可能导致ArithmeticException
的除法运算:
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = divide(10, 0); // 可能会抛出异常
System.out.println("Result: " + result);
} catch (ArithmeticException e) {
System.out.println("Error: " + e.getMessage()); // 捕获并处理异常
}
}
public static int divide(int a, int b) {
return a / b; // 当b为0时抛出ArithmeticException
}
}
在这个例子中,divide
方法在尝试用0进行除法时,会抛出ArithmeticException
。在main
方法中,try
块捕获了这个异常,catch
块则处理了它,避免了程序的崩溃。
2、异常体系
在Java异常体系中,Throwable
是所有错误和异常的根类,分为两大类:Error
和Exception
。
2.1 Throwable
java.lang.Throwable
是Java中所有错误和异常的父类。它提供了一些常用方法,帮助开发者处理和调试异常:
-
public void printStackTrace()
:打印异常的详细信息,包括异常类型、原因和发生位置。这对于调试非常有用,可以帮助开发者快速定位问题。 -
public String getMessage()
:获取发生异常的详细原因,返回异常的描述信息。
2.2 Error和Exception
Throwable
可以分为两类:
-
Error:表示Java虚拟机无法解决的严重错误,通常是程序无法恢复的错误,如虚拟机错误(
OutOfMemoryError
)、资源耗尽等。一般不编写针对性的代码进行处理,因为它们通常表示JVM无法正常运行。示例:
// 虚拟机内存溢出错误 throw new OutOfMemoryError("Java heap space");
-
Exception:表示程序可以捕获并处理的异常。
Exception
类的子类包括已检查异常(如IOException
)和未检查异常(如NullPointerException
)。开发者应当捕获和处理这些异常,以确保程序的健壮性。示例:
try { // 可能抛出异常的代码 } catch (IOException e) { // 处理IO异常 e.printStackTrace(); }
在Java程序的执行过程中,异常可以根据发生的阶段分为两类:编译时期异常和运行时期异常。
2.3 编译时期异常(Checked Exceptions)
- 定义:在代码编译阶段,编译器能够检测到可能发生的异常,并要求程序员处理这些异常。如果程序员未处理,编译器会直接报错,无法生成字节码文件。
- 特点:
- 编译器会发出警告,提示程序员必须处理。
- 通常是由于外部条件引起的,例如文件操作等。
- 示例:
FileNotFoundException
、IOException
等。
import java.io.FileReader;
import java.io.IOException;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("nonexistentfile.txt");
} catch (IOException e) {
e.printStackTrace(); // 处理异常
}
}
}
2.4 运行时期异常(Unchecked Exceptions)
- 定义:这些异常在编译阶段不会被检查,编译器不会给出任何提示,只有在代码运行时才会出现。
- 特点:
- 由程序员的代码错误引起,通常可以通过适当的判断和检查来避免。
- 继承自
java.lang.RuntimeException
及其子类。
- 示例:
ArrayIndexOutOfBoundsException
、NullPointerException
、ClassCastException
等。
public class UncheckedExceptionExample {
public static void main(String[] args) {
int[] array = {1, 2, 3};
try {
System.out.println(array[3]); // 可能抛出ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace(); // 处理异常
}
}
}
常见异常
编译时期异常(Checked Exceptions)
- IOException:发生输入/输出操作失败或被中断时抛出。
- FileNotFoundException:当试图打开一个不存在的文件时抛出。
- SQLException:与数据库操作相关的错误。
- ClassNotFoundException:当试图加载一个不存在的类时抛出。
- ParseException:在解析字符串到日期或数字时失败。
运行时期异常(Unchecked Exceptions)
- NullPointerException:当试图访问一个空对象的属性或方法时抛出。
- ArrayIndexOutOfBoundsException:当访问数组时使用了非法的索引(例如,超出范围)时抛出。
- ArithmeticException:在进行算术运算时出现错误,如除以零。
- ClassCastException:尝试将对象强制转换为不兼容的类型时抛出。
- IllegalArgumentException:传递给方法的参数不合法时抛出。
- NumberFormatException:将字符串转换为数字时发生格式错误时抛出。
原文地址:https://blog.csdn.net/CBCY_csdn/article/details/142643857
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!