Java---异常的初步了解

本文深入探讨了程序异常处理的两大风格:LBYL(Look Before You Leap)与EAFP(It’s Easier to Ask Forgiveness than Permission),并详细介绍了异常的基本用法、处理流程以及异常的分类。通过对比C语言和Java语言的异常处理方式,帮助读者理解不同场景下如何有效管理和预防异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常

程序错误分为:
①逻辑问题
②编译问题
③运行时问题

逻辑问题:程序没有按照预期的逻辑顺序执行
编译问题:编译问题多因为程序未遵守正确的语法规则导致的
运行时问题:程序运行过程中出现问题,并导致程序的终止

异常:即程序在运行过程中出现错误时通知调用者的一种机制

处理异常的风格

一般处理异常的风格分为两种:
①以C语言的异常处理方式
②以Java语言的异常处理方式

C语言型的处理方式:
预先进行异常的预测及防范,利用if 进行条件判断并进行处理操作

//伪代码
if(登陆错误) {
	登陆错路处理;
	return ;
}

这种处理异常的风格也被称为:LBYL风格(Look Before You Leap)在操作之前进行充分的检查

Java语言型的处理方式:
代码不进行异常的预测,发生异常后进行处理操作

try{
	账号登陆;
	加载界面;
	开始游戏;
}catch(账号登陆异常) {
	登陆异常处理;
}catch (加载界面异常){
	界面异常处理;
}catch (开始异常) {
	开始异常处理;
}

这种风格也被称为:EAFP风格(It’s Easier to Ask Forgiveness than Permission)事后获取原谅比事前获取许可更加简单

接下来我们讨论的都是EAFP风格的异常

异常的基本用法

try{
	//可能出现异常的代码块
}[catch (异常类型 异常对象){
	//对异常进行操作
}]
[finally {
	//预防特殊情况,finally内容必定执行
	//fianlly内容在最后执行,决定了finally内容有可能造成对catch内容冲相冲突的进行替换,如return 语句
}]

异常处理的流程

①程序先进行try中的代码
②如果try中没有异常出现,也会执行finally中的内容(如果写了finally的话)
③如果出现异常,将会从当前出现异常的语句中跳出到catch语句中
④catch语句中进行try异常类型的匹配操作,如果catch中异常类型不等同于try中抛出异常的类型,将向下一个catch语句中寻找匹配的异常类型catch
⑤如果没有找到匹配的异常类型,就将异常向上传递到上层调用者(上层调用者一般如main 函数中具有func 函数,func函数中书写了try…catch语句,那么main函数中调用func函数的语句就是上层调用者)
⑥无论找没找到相匹配的异常类型,fianlly中的内容一定执行
⑦如果main方法中也没合适的代码处理这个异常的话,就将交给JVM虚拟机继续宁处理,这个时候程序一定异常终止

异常的非try处理方式

抛出异常的方式
LBYL风格中抛出异常
if(异常发生代码) {
	throw new 异常类型("异常说明");
	//其中异常说明是可以按照自己想表达的含义书写
	//throw 关键字 throw的就是一个对象
}
异常说明

在定义方法的时候进行提醒该方法可能存在的异常问题

public int divide(int x,int y) throws ArithmetricException{
	if(y == 0) {
	throw new ArithmetricException("除数不能为0");
	}
	return x / y;
}

//throws 关键字就是异常说明关键字,后面接着异常类型

异常的分类

异常的顶层类:Throwable 类,该类派生出 Error 以及 Exception类
这两个派生类又分可以分类为:
①非受查异常
②受查异常

非受查异常包含:Error类 以及 Exception类下的RuntimeException类
受查异常包含:Exception类中的IOException、ClassNotFoundException、CloneNotSupportedException等异常

其中受查异常和非受查异常的主要区别在于:
①受查异常可以进行捕获处理
②非受查异常不能进行手动处理,JVM自动抛出并自动捕获,此类代码多是自身逻辑出现错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值