JavaEE程序猿之异常(23)

本文通过生动的例子解释了Java中异常的概念及其处理方式,包括如何通过try-catch块现场处理异常,以及如何通过throws将异常抛给上级处理。

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

什么是异常:

在《java编程思想》中这样定义异常:阻止当前方法或作用域继续执行的问题。这样的说法抽象


①“阻止当前方法继续执行”:假设我们有一个班,某天我们要期末考试。正常的流程是这样

其中,老师正常执行“发卷子()”这个方法,我们正常开考,这时候是没有异常的。
但是如果在老师发卷子的时候,有个熊孩子A不安分、捣乱,导致老师没法正常发卷子,我们的考试就不能正常进行。这时候,那个熊孩子A就是异常,因为他阻止了“发卷子()”这个方法继续执行。


“阻止当前作用域继续执行”:还是假设我们有一个班,这次不是考试了,是体育课。
大环境是这个操场,也就是说我们体育课的作用域是操场,正常的体育课是这样的:

那么异常状态是什么呢,假设现在有个倒霉孩子B,上体育课的时候受伤了,还挺严重的,这时候老师得把倒霉孩子B送医务室,体育课就没法上了。这时候,那个倒霉孩子B就是异常,因为他阻止了体育课在操场这个域的正常执行执行。
在上面两个例子中,熊孩子A和倒霉孩子B就是异常了。他们出了点状况,使我们正常情况下能完成的事没有完成。
什么是异常处理:
异常阻止了程序的正常执行产生了中断;然后程序还是要继续,所以就有了异常处理的概念,发生异常后,通过一定的处理机制来让程序继续;
异常处理有两种形式,以熊孩子A为例,正常的考试流程doExam()
要么现场处理:捕获异常(try),进行处理(catch)
要么交给上级处理:throw给调用者
	void teacherIn(){
		System.out.println("老师走进教室");
	}
	
	void distributePaper(){
		System.out.println("发卷子");
	}
	
	void startExam(){
		System.out.println("开始考试");
	}
	
	void doExam(){
		teacherIn();
		distributePaper();
		startExam();
	}

发卷子时有可能会有熊孩子出现,发生异常;也就是distributePaper();方法是有可能要出问题的;有风险的东西我们要检查,使用try块进行包裹代表实施检查,当发生问题时在catch中进行处理;
void doExam(){
		teacherIn();
		
		try{
			//1.检查是否有异常
			distributePaper();
		}catch(Exception e){
			//2.发生异常时进行处理
			System.out.println("将熊孩子扔出去");
		}
		
		startExam();//3.没有异常或者异常处理后继续执行


可以看到针对熊孩子这个异常,如果出现,就在catch中进行处理,如果没有出现则继续执行startExam();
第二种情况
	void doExam() throws Exception{
		teacherIn();	
		//发生异常后交给上级(方法调用者)处理:把熊孩子的事报告给上级,等待上级决定是否继续考试
		distributePaper();
		startExam();
	}


当发卷过程中出现熊孩子时,老师就报告教导主任,等待教导主任决策;而考试自然就被延迟了;
void marry(Object wife){
		System.out.println("和"+wife+"结婚");
	}
	void getChild(){
		System.out.println("生子");
	}
	void lifeForever(){
		System.out.println("白头偕老");
	}
	void matrimony(){
		System.out.println("宝宝的婚姻生活开始");
		Object marong=new Object();
		marry(marong);
		getChild();
		lifeForever();
	}


本来宝宝的生活是这样的

但是马蓉出轨,于是成了这样:
这个例子中,马蓉出轨是一个异常,她造成了婚姻不能继续了,所以王宝强catch到这个异常后throw了这个异常,于是有了离婚声明。但是最后,不论宝宝的婚姻里面有没有马蓉出轨,媒体都会找点事让宝宝上下新闻,所以有了个finally。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值