一、概念
-
异常是指程序运行中出现的不期而至的各种状况,如:文件找不到,网络连接失败,非法参数等
-
异常发生在程序运行期间,影响正常的程序执行流程。
-
分为三大类:
- 检查性异常;
- 运行时异常;
- 错误ERROR:错误不是异常,是脱离程序员控制的问题,在代码中通常被忽视。如:栈溢出。
-
异常处理框架
- Java将异常当对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。
- Java API已定义许多异常类,通常分为:错误ERROR,异常EXCEPTION。
-
Error对象类由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。
-
Exception有个重要子类RuntimeException(运行时异常)
- 数组下标越界;
- 空指针;
- 算数异常;
- 丢失资源;
- 找不到类异常。
-
Error与Exception的区别:Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些时,Java虚拟机JVM一般会选择终止线程;
Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能地去处理这些异常。
二、异常处理机制
- 抛出异常
- 捕获异常
- 异常处理五个关键字:try,catch,finally,throw,throws.
public static void main(String[] args) {
int a =0;
int b =1;
try {
new Test().test(a,b);
} catch (ArithmeticException e) {
throw new RuntimeException(e);
}
//ctrl+alt+t快捷键:选择包裹体
//try..catch.. ,可以不要finally,
//假设要捕获多个异常:异常类型要从小到大,否则报错。
try{
//System.out.println(b/a);
new Demo1().a();
}catch(ArithmeticException e){ //catch(想要捕获的异常类型) 捕获异常;
System.out.println("程序出现异常"+e);
}catch(Error e){
System.out.println("ERROR");
}catch(Throwable e){
System.out.println("Throwable异常");
}
finally { //finally处理善后工作,比如关闭某些资源
System.out.println("finally");
}
}
public void a(){
b();
}
public void b(){
a();
}
//方法头内用throws抛出异常
public void test(int a,int b) throws ArithmeticException{
if (a==0) {
throw new ArithmeticException();//主动抛出异常,一般在方法中使用
}else{
System.out.println(b/a);
}
}
三、实际应用中的经验总结
- 处理运行时异常时,设计逻辑去合理规避,同时辅助try~catch处理;
- 多重catch块后面,可以加一个catch(Exception)来处理可能被遗漏的异常;
- 对于不确定的代码, 也可以加上助try~catch处理潜在的异常;
- 尽量去处理异常;
- 具体如何处理异常,根据不同业务和异常类型决定;
- 尽量添加finally语句去释放占用的资源。IOScanner
天将幕,雪乱舞,半梅花半飘柳絮......
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?