异常:需求:”老师用电脑讲课“

本文通过一个具体的教学场景,深入浅出地介绍了异常处理的基本概念及其应用。从异常类的定义到异常的抛出与捕获,再到异常的具体处理流程,全方位解析了异常处理机制。

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

/*
需求:毕老师讲课

构造代码完毕现在开始来分析异常
1:蓝屏 冒烟  2个异常类的的定义
2:定义一个状态值代表不同的异常,并在可能出现异常的地方抛出异常通告,在哪儿抛?蓝屏和冒烟都是电脑的故障,只有在电脑运行时候才会出问题
3:抛出异常就要开始try-catch处理了。
在哪儿处理?谁调用了电脑的运行函数?是讲课功能依赖于电脑时候,讲课功能调用了电脑运行功能。
怎么处理? 蓝屏重启 。冒烟抛出新异常(的对象)给BOSS,BOSS接收到后,程序跳转到下一个try-catch语句_catch (NoplanException e) 捕获新异常

------------------------------------------------------------------------------------------------------------

程序大概思路:
建老师
老师要有名字电脑(构造函数)
于是建电脑
电脑基本功能,运行,重启
老师要讲课,建讲课功能,讲课要用到电脑,调用电脑运行功能
进入main函数,建一个毕老师的对象,然后  毕老师.讲课
基本程序出来后,开始考虑异常问题
2种异常,蓝屏,冒烟
于是建这2个类,类是异常类,需要继承Exception,并且利用其构造函数特性Exception(String),可以自定义异常信息
谁出现异常?
电脑
标示哪种情况下出现哪种异常,int state,1正常,2蓝屏,3冒烟
在电脑里用if判断,1:不动,2:throw个 蓝屏对象,3:throw个 冒烟对象。对象记得跟信息(String)
既然函数内throw了,那么函数上就要throws,跟2个异常类的类名
同时既然throw了,那么就要try-catch,在哪儿try-catch呢?这时就要看哪儿用了(加载)电脑。
观察后得知是讲课要用到电脑,于是在讲课功能里进行try-catch
try了需要跟2个catch,一个捕获蓝屏对象,一个捕获冒烟对象,蓝屏对象就重启,冒烟对象无法处理就要抛出去
抛出去过后就该是main函数接手,若main函数也无法处理就要终止该程序,于是准备在main函数里进行一次try-catch
但是抛出一个冒烟的对象给老师,老师无法处理,不符合现实规律,并且电脑坏也不是老师的责任,但是电脑坏产生的直接影响就是老师无法讲课
于是定义一个“老师无法讲课”的异常来替代这个冒烟异常让main函数接手。
最后既然又抛了次,就该在main函数里try-catch一次。 捕获noplan这个异常对象
*/

//----------------------------------------------------------------------------
//---------------------定义异常类---------------------------------------------
class LanpingException extends Exception //蓝屏,Exception是所有异常类的超类
{
		LanpingException(String msg)
		{
		  super(msg);
		  /*
		  Exception(msg)      						
		  Exception(String message):构造带指定详细消息的新异常。
		  */
		}
}

class MaoyanException extends Exception //冒烟,同上
{
		MaoyanException(String msg)
		{
		  super(msg);//同上
		}
}


class NoplanException extends Exception //课时无计划
{
		NoplanException(String msg)
		{
		  super(msg);//同上
		}
}

//---------------------定义异常类---------------------------------------------
//----------------------------------------------------------------------------


class Cmp //电脑类
{
	int state = 3;//定义状态值
	void funcRun()throws LanpingException,MaoyanException //抛出多个异常
	{
	 //异常在电脑运行时候发生
	 if(state==2)
	 		throw new LanpingException("蓝屏啦");
	 if(state==3)
 			throw new MaoyanException("冒烟啦");
		 		
	System.out.println("开机运行");
	}

	void funcReset()
	{
	System.out.println("重启");			
	}
	
}

class Teacher
{
   private String name;
   private Cmp pc;

	
	Teacher(String name,Cmp pc)//给老师名字,电脑
	{
		this.name = name;	 
		this.pc = pc;	
	}


	void funcJK()throws NoplanException
	{
	try 
	{
		pc.funcRun();	//检测
	} 
	catch (LanpingException e) //电脑蓝屏时(state==2)代码直接跳到这里来
	{
		 pc.funcReset();
	}
	catch (MaoyanException e) //电脑冒烟时(state==3)代码直接跳到这里来
	{
			test();
		 throw new NoplanException("课时无法继续,"+e.toString());  //电脑冒烟,导致原计划课时无法完成,故定义一个新的异常类NoplanException,
		 																			  //e.getMessage():获取MaoyanException的异常信息
		 																														 //然后将这个无法继续的消息传达给张老师
		 //抛的时候要抛NoplanException的对象
	}
	
		System.out.println("讲课");
	}
	
	public void test()
	{
		System.out.println("自习");	
	}
}


class Run
{
		public static void main(String[] args)
		{
			Teacher t = new Teacher("毕老师",new Cmp());
			
			try 
			{
		   	t.funcJK();
			} 
			catch (NoplanException e) 
			{
				 System.out.println(e.toString());
				 System.out.println("换老师或者放假");
			}
		}	
}

/*
e.getMessage()  和 e.toString() 的观察

e.getMessage() -->只获取文字内容; Exception(String)   ==>  super(msg)

自习
课时无法继续冒烟啦
换老师或者放假

e.toString()   -->获取文字内容的同时加上异常类的前缀;
自习
NoplanException: 课时无法继续,MaoyanException: 冒烟啦
换老师或者放假

总结:二者都可以被打印,知识打印出的效果有点差异
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值