Java异常机制
Java异常机制
想详细学习,请参考:最全最详细的Java异常处理机制
什么是异常?
程序在执行中发生了不正常的情况,这种情况就叫做异常。
为了应对程序中的异常,java提供了异常机制,它的作用:
java语言是很完善的语言,提供了异常的处理方式。当程序执行出现异常的时候,java会把异常信息打印输出到控制台,以供参考。程序员看到异常信息后,会对程序进行修改,让程序更加健壮,这体现了java的健壮性。
1. Error
2. Exception
异常分为编译时异常和运行时异常,他们都发生在运行阶段,是不会发生在编译阶段的。
那为什么有编译时异常呢?
编译时异常是必须在编译阶段预先处理的,如果不处理编译器报错。并且异常的发生就是new了异常对象,而创建对象是发生在运行阶段的,所以异常都是发生在运行阶段的。
编译时异常概率较高,可以进行预先处理;运行时异常概率较低,不能进行预先处理
编译时异常(受检异常和受控异常)和运行时异常(未受检异常、未受控异常)
两者之间的区别:
运行时异常:所有的RuntimeException及子类都属于运行时异常。运行时异常在编写程序阶段,可以选择处理或不处理。运行时异常发生概率较低。
编译时异常:所有的Exception的直接子类,都叫做编译时异常。编译时异常必须在编写程序的时候预先对异常进行处理,如果不处理编译器报错。编译时异常发生概率较高。这个必须要处理,即在我们的编译器中代码不变红
处理方式
- 在方法声明的位置,使用throws关键字,抛出异常,(抛给上一级)。
- 使用try catch语句进行异常捕捉。
编译时异常
方法一:利用try catch捕捉异常,在当前文件就可以解决。
语法如下:
try{
//可能会出错的代码块
}catch(Exception e){
//出现异常后,执行的语句
e.;
}finally{
//通常用来释放资源
}
try catch之后的语句正常执行。try内部的捕捉代码出现错误,内部的代码不会执行。
方法二:一级一级往上抛,直到解决为止。可以抛出具体异常,也可以抛出父类异常。最终抛给JVM。(抛给上级,让上级处理,自己并不进行处理)
抛出异常的语句之后的语句不会执行。
运行时异常
可以处理,也可以不处理
处理方式:可以使用try catch来对可能存在异常的代码进行捕捉。
异常对象
异常对象的生成:
由虚拟机自动生成:程序运行过程中,虚拟机检测到程序发生了问题,如果在当前代码中没有找到相应的处理程序,就会在后台自动创建一个对应异常类的实例对象并抛出——自动抛出。
由开发人员手动创建:Exception exception = new Exception();——创建好的异常对象不抛出对程序没有任何影响,和创建一个普通对象一样。
只有进行打印或者throw抛出才可以中断程序。
我们可以利用Exception类创建异常对象。
``
public static void main(String[] args) {
Exception exception = new Exception("此处有异常");
String message = exception.getMessage();
System.out.println(message);
exception.printStackTrace();
}
异常对象的方法:
getMessage:获取异常信息。
printStackTrace():打印异常跟踪信息和异常位置。(常用)
异常体系结构图
自定义异常
作用:能够使自己创建的类更加符合实际开发形式,能够抛出异常跟踪信息。
- 继承Exception或RuntimeException。
- 提供两个构造方法,一个无参构造,一个参数为String参数构造。
3. try catch语法
语法如下:
try{
//可能会出错的代码块
}catch(Exception e){
//出现异常后,执行的语句
e.;
}finally{
//通常用来释放资源
}
分析:
- catch()中的异常,可以写具体异常,也可以写父类异常
- catch()可以写多个,写多个具体异常。一个一个精确的处理。
- 多个catch捕捉,建议从小到大,从上到下的原则
- finally中的代码是最后执行,并且一定会执行(即使try块中有return)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix