1. 概述
Java异常处理是Java语言的一个重要特性,它可以帮助我们更好地管理程序中的错误和异常情况。本文档将详细介绍Java中的异常处理机制,包括异常的概念、分类、捕获和处理方法。
2. 异常概念
异常(Exception)是在程序执行过程中发生的不正常情况,它会打断程序的正常流程。Java语言将异常分为两类:错误(Error)和异常(Exception)。
2.1 错误(Error)
错误是程序无法恢复的严重问题,通常是由Java虚拟机(JVM)引起的。错误发生时,JVM会终止程序的执行。常见的错误有:OutOfMemoryError(内存溢出)、StackOverflowError(栈溢出)等。
2.2 异常(Exception)
异常是程序在运行过程中可能发生的问题,可以分为以下两种:
- 检查型异常(Checked Exception):这类异常在编译时必须进行处理,否则编译不通过。例如:IOException、SQLException等。
- 非检查型异常(Unchecked Exception):这类异常包括运行时异常(RuntimeException)和错误(Error)。编译时不需要处理,运行时可能出现。例如:NullPointerException、ArrayIndexOutOfBoundsException等。
3. 异常处理机制
Java提供了try、catch、finally、throw和throws五个关键字来处理异常。
3.1 try语句块
try语句块用于包含可能发生异常的代码。语法如下:
try {
// 可能发生异常的代码
} catch (ExceptionType1 e1) {
// 处理异常的代码
} catch (ExceptionType2 e2) {
// 处理异常的代码
} finally {
// 无论是否发生异常都会执行的代码
}
3.2 catch语句块
catch语句块用于捕获并处理try语句块中发生的异常。可以根据需要捕获多个异常,每个catch块处理一种异常。语法如下:
catch (ExceptionType e) {
// 处理异常的代码
}
3.3 finally语句块
finally语句块用于执行无论是否发生异常都会执行的代码,例如关闭资源。语法如下:
finally {
// 无论是否发生异常都会执行的代码
}
3.4 throw关键字
throw关键字用于手动抛出一个异常。语法如下:
throw new ExceptionType("异常信息");
3.5 throws关键字
throws关键字用于声明方法可能抛出的异常。语法如下:
public void method() throws ExceptionType {
// 方法体
}
4. 异常处理实战
以下是一个简单的异常处理示例:
public class ExceptionDemo {
public static void main(String[] args) {
try {
int result = divide(10, 0);
System.out.println("结果:" + result);
} catch (ArithmeticException e) {
System.out.println("捕获到算术异常:" + e.getMessage());
} finally {
System.out.println("执行finally语句块");
}
}
public static int divide(int a, int b) {
if (b == 0) {
throw new ArithmeticException("除数不能为0");
}
return a / b;
}
}
Exception 和 Error 有什么区别?
在 Java 中,所有的异常都有一个共同的祖先 java.lang
包中的 Throwable
类。Throwable
类有两个重要的子类:
Exception
:程序本身可以处理的异常,可以通过catch
来进行捕获。Exception
又可以分为 Checked Exception (受检查异常,必须处理) 和 Unchecked Exception (不受检查异常,可以不处理)。Error
:Error
属于程序无法处理的错误 ,不建议通过catch
捕获 。例如 Java 虚拟机运行错误(Virtual MachineError
)、虚拟机内存不够错误(OutOfMemoryError
)、类定义错误(NoClassDefFoundError
)等 。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。
Checked Exception 和 Unchecked Exception 有什么区别?
Checked Exception 即 受检查异常 ,Java 代码在编译过程中,如果受检查异常没有被 catch
或者throws
关键字处理的话,就没办法通过编译。
除了RuntimeException
及其子类以外,其他的Exception
类及其子类都属于受检查异常 。常见的受检查异常有:IO 相关的异常、ClassNotFoundException
、SQLException
...。
Unchecked Exception 即 不受检查异常 ,Java 代码在编译过程中 ,我们即使不处理不受检查异常也可以正常通过编译。
RuntimeException
及其子类都统称为非受检查异常,常见的有(建议记下来,日常开发中会经常用到):
NullPointerException
(空指针错误)IllegalArgumentException
(参数错误比如方法入参类型错误)NumberFormatException
(字符串转换为数字格式错误,IllegalArgumentException
的子类)ArrayIndexOutOfBoundsException
(数组越界错误)ClassCastException
(类型转换错误)ArithmeticException
(算术错误)SecurityException
(安全错误比如权限不够)UnsupportedOperationException
(不支持的操作错误比如重复创建同一用户)- ……
标签:Exception,Java,错误,处理,---,catch,异常 From: https://blog.csdn.net/2401_86844317/article/details/142996437