Day28 异常
一、概念
异常是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程。
设计良好的程序应该在异常发生时提供处理这些不正常事件的方法,使程序不会因为异常的发生而阻断或产生不可预见的结果。
注意:Java语言使用异常处理机制为程序提供了异常处理的能力 。
二、异常的分类
Java程序运行过程中所发生的异常事件从严重性可分为两类:
1、 错误(Error):JVM系统内部错误或资源耗尽等严重情况-属于JVM需要负担的责任,这一类异常事件无法恢复或不可能捕获,将导致应用程序中断。
2、 异常(Exception):其它因编程错误或偶然的外在因素导致的一般性问题。这类异常得到恰当的处理时,程序有机会恢复至正常运行状况。
3、异常(Exception)又分为两类
RuntimeException – 非受检性异常
一般性异常 --------- 受检性异常
4、Exception分类:
(数组越界,空指针,类型转换错误)
1、非受检(unchecked)异常(运行时异常 RuntimeException):编译器不要求强制处置的异常。一般是指编程时的逻辑错误。是程序员应该积极避免其出现的异常java.lang.RuntimeException及它的子类都是非受检异常:
错误的类型转换:java.lang.ClassCastException
数组下标越界:java.lang.ArrayIndexOutOfBoundsException
空指针访问:java.lang.NullPointerException
算术异常(除0溢出):java.lang.ArithmeticException
2、受检(checked)异常 — 一般性异常:编译器要求必须处置的异常。指的是程序在运行时由于外界因素造成的一般性异常。
没有找到指定名称的类:java.lang.ClassNotFoundException
访问不存在的文件:java.io.FileNotFoundException
操作文件时发生的异常:java.io.IOException
操作数据库时发生的异常:java.sql.SQLException
5、运行时异常(RunntimeException)非受检性异常:那些程序员在编写程序的时z免的异常(逻辑异常),数组越界异常,类型转换异常,空指针异常
非运行时异常:程序员避免不了,由外界因素导致的
异常分类图:
三、 异常处理机制
1、概念:
- 抛出异常:当程序中发生异常时,可以使用
throw
关键字手动抛出异常,也可以由系统自动抛出异常。 - 捕获异常:使用
try-catch
块来捕获可能发生的异常,以便对异常进行处理。在try
块中编写可能抛出异常的代码,然后在catch
块中捕获并处理异常。
try {
// 可能抛出异常的代码
} catch (ExceptionType1 e1) {
// 处理异常的代码
} catch (ExceptionType2 e2) {
// 处理异常的代码
} finally {
// 无论是否发生异常,都会执行的代码
}
3.处理异常:在 catch
块中对捕获到的异常进行处理,可以输出异常信息、记录日志、进行补救处理,或者抛出新的异常。
5.finally 块:finally
块中的代码无论是否发生异常都会被执行,通常用于释放资源、关闭连接等清理工作。
6.异常链:在 Java 7 及之后的版本中,引入了异常链机制,可以在捕获到异常后将原始异常作为新异常的 cause 进行抛出,以便更好地追踪异常的来源。
理解:1.Java程序在执行过程中如果出现异常,会自动生成一个异常类对象, 该异常对象将被自动提交给JVM,这个过程称为抛出(throw)异常。
2.当JVM接收到异常对象时,会寻找能处理这一异常的代码
2.1 找到了 - 把当前异常对象交给其处理,这一过程称为捕获(catch)异常和处理异常。
2.2 没找到 - 运行时系统将终止,相应的Java程序也将退出。
2、Java处理异常的能力:
2.1.try…catch…
2.2.throws
2.3.throw
3、try…catch…语法结构:
try{
...可能出现异常的代码...
}catch(异常类型 e){//捕获异常
...处理异常...
}finally{
...不管是否发生异常,都会执行的代码块...
}
注意:
1.finally代码块根据需求可写可不写
2.经验告诉我们关闭资源的代码一般写在finally
3.try…catch…可以有多个catch
4.先捕获的异常范围不能大于后捕获的异常范围
4、throws
语法结构:
public void method() throws 异常1,异常2{}
理解:
throws是抛出异常,抛给方法的调用方
5、throw
语法结构:
throw new 异常();
理解:
手动抛出异常,throw 结合自定义异常使用
四、 自定义异常类
1、概念: 在 Java 中,可以通过继承 Exception 或其子类来创建自定义异常类。自定义异常类通常用于表示特定的业务逻辑异常或错误,以便在程序中进行捕获和处理。
2、创建自定义异常,需要继承Exception 或其子类。
public class MyException extends Exception {
@Override
public String toString() {
// TODO Auto-generated method stub
return "我们自己的异常类";
}
}
3、使用自定义异常
解决业务需求上的问题 。
4、举例:
public class CustomExceptionExample {
public void doSomething() throws CustomException {
// 业务逻辑
if (/* 出现异常的条件 */) {
throw new CustomException("发生自定义异常");
}
}
public static void main(String[] args) {
CustomExceptionExample example = new CustomExceptionExample();
try {
example.doSomething();
} catch (CustomException e) {
// 捕获并处理自定义异常
e.printStackTrace();
}
}
}
public class CustomException extends Exception {
public CustomException() {
super();
}
public CustomException(String message) {
super(message);
}
public CustomException(String message, Throwable cause) {
super(message, cause);
}
public CustomException(Throwable cause) {
super(cause);
}
}
}
public CustomException(String message, Throwable cause) {
super(message, cause);
}
public CustomException(Throwable cause) {
super(cause);
}
}
标签:CustomException,java,Day28,异常,catch,cause,public
From: https://blog.csdn.net/yjp1240201821/article/details/137247989