/*
需求:毕老师讲课
构造代码完毕现在开始来分析异常
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: 冒烟啦
换老师或者放假
总结:二者都可以被打印,知识打印出的效果有点差异
*/
异常:需求:”老师用电脑讲课“
最新推荐文章于 2024-07-29 19:17:56 发布