当前位置: 技术问答>java相关
关于违例的问题
来源: 互联网 发布时间:2015-02-23
本文导语: 我按照书上讲述的违例写了下面的例子: public class aaa { public static int abc(int i,int j) throws Exception { if (j==0) { throw new Exception(); } else return (i/j); } public static...
我按照书上讲述的违例写了下面的例子:
public class aaa
{
public static int abc(int i,int j) throws Exception
{
if (j==0)
{
throw new Exception();
}
else
return (i/j);
}
public static void main(String[] args)
{
int k,h=5;
try
{
k=abc(h,0);
System.out.println(k);
}
catch(Exception e)
{
k=h/1;
}
}
}
代码的意思是说,k=abc(h,0);将产生一个违例,然后执行catch(Exception e),我的理解是执行完catch(Exception e)后应该回到刚才的起点,可以继续执行k=abc(h,0);后面的语句,但结果是不行的,程序似乎到此就结束了,请问谁能告诉我为什么吗?
public class aaa
{
public static int abc(int i,int j) throws Exception
{
if (j==0)
{
throw new Exception();
}
else
return (i/j);
}
public static void main(String[] args)
{
int k,h=5;
try
{
k=abc(h,0);
System.out.println(k);
}
catch(Exception e)
{
k=h/1;
}
}
}
代码的意思是说,k=abc(h,0);将产生一个违例,然后执行catch(Exception e),我的理解是执行完catch(Exception e)后应该回到刚才的起点,可以继续执行k=abc(h,0);后面的语句,但结果是不行的,程序似乎到此就结束了,请问谁能告诉我为什么吗?
|
请认真看那段文章。
你要考虑,如果这些异常情况发生了,你打算怎么办?是调用出错处理,结束这段代码(try块)的执行还是要采取一些修正措施,重新执行(你要保证肯定能修复,否则就如你所说,死循环啦)
所以一般情况下,我们都是这么做的:
无论谁,只要“掷”出一个违例,就表明没有办法补救错误,而且也不希望再回来。
try{
//可能产生异常的代码
}
catch{
}
根据java异常机制的定义,在发生异常(throw Exception)时,系统是去跳转(就是忽略try{}块里,发生异常后面的代码),寻找对应的catch()块执行。
在你想要恢复”时,就要人为!!!的在catch()后作修正,在返回调用try{}块,比如用循环,除非执行到try{}的最后一句(在那里加上跳出循环的控制)。
------所以尽管“恢复”表面上十分不错,但在实际应用中却显得困难重重。其中决定性的原因可能是:我们的控制模块必须随时留意是否产生了违例,以及是否包含了由产生位置专用的代码。这便使代码很难编写和维护——大型系统尤其如此,因为违例可能在多个位置产生。
你要考虑,如果这些异常情况发生了,你打算怎么办?是调用出错处理,结束这段代码(try块)的执行还是要采取一些修正措施,重新执行(你要保证肯定能修复,否则就如你所说,死循环啦)
所以一般情况下,我们都是这么做的:
无论谁,只要“掷”出一个违例,就表明没有办法补救错误,而且也不希望再回来。
try{
//可能产生异常的代码
}
catch{
}
根据java异常机制的定义,在发生异常(throw Exception)时,系统是去跳转(就是忽略try{}块里,发生异常后面的代码),寻找对应的catch()块执行。
在你想要恢复”时,就要人为!!!的在catch()后作修正,在返回调用try{}块,比如用循环,除非执行到try{}的最后一句(在那里加上跳出循环的控制)。
------所以尽管“恢复”表面上十分不错,但在实际应用中却显得困难重重。其中决定性的原因可能是:我们的控制模块必须随时留意是否产生了违例,以及是否包含了由产生位置专用的代码。这便使代码很难编写和维护——大型系统尤其如此,因为违例可能在多个位置产生。