黑马程序员技术交流社区
标题:
关于异常处理问题
[打印本页]
作者:
HM何伟
时间:
2013-3-30 22:47
标题:
关于异常处理问题
本帖最后由 HM何伟 于 2013-4-1 00:08 编辑
当i=1时,我这个程序怎会出现死循环呢?
/*
老师上课这个问题,用自己的笔记本
笔记本事物
开机运行功能
2个异常,蓝屏,冒烟
老师事物
上课功能
*/
class LanPingException extends Exception{
LanPingException(String msg)
{
super(msg);
}
}
class MaoYanException extends Exception{
MaoYanException(String msg)
{
super(msg);
}
}
class TeachStopException extends Exception{
TeachStopException(String msg)
{
super(msg);
}
}
class FixComputer{
public void Fix()
{
System.out.println("把电脑修好了");
}
}
class Teacher{
private String name;
Teacher(String name)
{
this.name=name;
}
Computer co=new Computer();
FixComputer fi=new FixComputer();
public void teachxue()throws TeachStopException
{
try
{
co.run();
System.out.println(name+"老师在上课");
}
catch (LanPingException e)
{
System.out.println(e.getMessage());
co.result();
teachxue();
}
catch(MaoYanException e)
{ System.out.println(e.getMessage());
this.function();
}
}
public void function()
{
System.out.println("大家做练习吧");
fi.Fix();
}
}
class Computer{
private int i=1;
public void run()throws LanPingException,MaoYanException
{
if (i==1)
throw new LanPingException("电脑蓝屏了");
if(i==2)
throw new MaoYanException("电脑冒烟了");
System.out.println("电脑正常开机运行");
}
public void result()
{
System.out.println("电脑重启");
}
}
class ComputerTest{
public static void main(String[] args)
{ Teacher te=new Teacher("石松老师");
try
{
te.teachxue();
}
catch (TeachStopException e)
{
te.function();
}
}
}
复制代码
作者:
lucy198921
时间:
2013-3-30 23:14
哥们,代码中没有接收到某一个方法的返回指令,一直在里面循环.
电脑蓝屏
电脑重启
电脑蓝屏
电脑重启
.
.
.
..
..
作者:
陈丽莉
时间:
2013-3-30 23:35
若还有问题,继续追问;没有的话,将帖子分类改成【已解决】哦~
作者:
HM何伟
时间:
2013-3-31 11:04
over了,明白了
作者:
lucy198921
时间:
2013-3-31 12:58
/*
老师上课这个问题,用自己的笔记本
笔记本事物
开机运行功能
2个异常,蓝屏,冒烟
老师事物
上课功能
*/
class LanPingException extends Exception
{
LanPingException(String msg)
{
super(msg);
}
}
class MaoYanException extends Exception
{
MaoYanException(String msg)
{
super(msg);
}
}
class TeachStopException extends Exception
{
TeachStopException(String msg)
{
super(msg);
}
}
class Computer
{
//电脑状态指示 变量
private int x = 0;
public void run()throws LanPingException,MaoYanException
{
if(x==1)
throw new LanPingException("电脑蓝屏了");
if(x==2)
throw new MaoYanException("电脑冒烟了");
System.out.println("开机了");
}
public void reset()
{
System.out.println("重启了");
x = 0;
}
}
class Teacher
{
private String name;
Teacher(String name)
{ this.name = name;}
Computer c = new Computer();
public void teach() throws TeachStopException
{
try
{
c.run();
System.out.println(name+"..老师上课");
}
catch (LanPingException e)
{
System.out.println(e.getMessage());
c.reset();
teach();
}
catch(MaoYanException e)//MYE e = new MaoYanException();
{
System.out.println(e.getMessage());
throw new TeachStopException("课程不能再进行了");
}
}
public void test()
{
System.out.println("请大家做练习");
}
}
class ExceptionTest
{
public static void main(String[] args)
{
Teacher t = new Teacher("张三");
try
{
t.teach();
}
catch (TeachStopException e)
{
t.test();
}
}
}
复制代码
再看看这个代码吧,或许你有更多的了解. fix这个方法应该是在老师这个类里, Teacher t=new Teacher();
作者:
黑马李杰
时间:
2013-3-31 15:20
因为你的Computer类中的变量i的值一直没变,所以每次调用run()方法都是抛出蓝屏的异常,你把异常抓住之后又调用了teachxue()方法,这样jvm又调用run()方法又抛出相同的异常,类似于递归,所以会出现死循环,你在result()方法中,把i的值加1就可以了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2