class Test { public int devide(int x, int y) { int result = x/y; // 实际发生异常点, 为什么异常不在这里处理(当然确实不应该在这里做出处理)当然不应该在这里处理,你看清楚了,这个是定义devide方法的,并不会导致异常int reslut = new Test().devide( 3, 0 ); //这个是导致异常的关键,所以从进入点捕捉异常并处理
个人觉得这样声明这个函数可能更加好点 public int devide(int x,int y) throws ArithmeticException {} 这样的话,调用者自然会捕捉这个异常!!小弟初学,不知道说的对否?
我同意楼主的观点,int result = x/y;这条语句才是实际的异常发生处, 至于楼主的疑问,我觉得是这样,因为程序是从main开始执行,PC指针逐条执行main中的程序,devide只是做为一个被调用函数的角色,当PC执行到int reslut = new Test().devide( 3, 0 ); 语句时发生了异常,当时应该在此处捕获,如果将devided方法设为主方法的话,捕获异常也就是在int result = x/y;这条语句处了. 楼主的问题怎样返回以及返回什么对象我也有些疑问,但我觉得应该从函数调用的机制上讨论,从catch(Exception e )这条语句应该可以判断返回的是发生相关例外的类对象,这样才能捕获到.做以下分析,仅为个人想法: 调用devide( )方法要保留现场,所以调用点处的PSW,参数等入栈,devide()方法中的局部变量等数据区入栈,当执行到int result = x/y语句时发生异常,异常类对象,catch语句入栈,PC转至catch语句执行,异常信息出栈输出,此时程序中止.
: love_xf() ( ) 信誉:100 芸芸几百字,我没怎么看懂!哈哈!不是取笑,是真的
推荐使用Jbuilder运行,进行跟踪非常有效 作为try来说一定要将程序流程弄清楚,一步一步地走先main再try,如果在这里出现调用则看是否抛出异常,接着看catch是否捕获然后在fanily结束(无论是否有return都在fanily结束) public int devide(int x, int y) { int result = x/y; // 实际发生异常点, 为什么异常不在这里处理(当然确实不应该在这里做出处理) 这里应该是使用了引用变量(int reslut = new Test().devide( 3, 0 ); // 调用点) 本人的一点拙见— —
to star_str(生命火花) : 打错了几个字,没什么难懂吧!楼主想知道返回什么,怎么返回不就是得从原理的角度分析吗
{
public int devide(int x, int y)
{
int result = x/y; // 实际发生异常点, 为什么异常不在这里处理(当然确实不应该在这里做出处理)当然不应该在这里处理,你看清楚了,这个是定义devide方法的,并不会导致异常int reslut = new Test().devide( 3, 0 ); //这个是导致异常的关键,所以从进入点捕捉异常并处理
public int devide(int x,int y) throws ArithmeticException {}
这样的话,调用者自然会捕捉这个异常!!小弟初学,不知道说的对否?
楼主的问题怎样返回以及返回什么对象我也有些疑问,但我觉得应该从函数调用的机制上讨论,从catch(Exception e )这条语句应该可以判断返回的是发生相关例外的类对象,这样才能捕获到.做以下分析,仅为个人想法:
调用devide( )方法要保留现场,所以调用点处的PSW,参数等入栈,devide()方法中的局部变量等数据区入栈,当执行到int result = x/y语句时发生异常,异常类对象,catch语句入栈,PC转至catch语句执行,异常信息出栈输出,此时程序中止.
作为try来说一定要将程序流程弄清楚,一步一步地走先main再try,如果在这里出现调用则看是否抛出异常,接着看catch是否捕获然后在fanily结束(无论是否有return都在fanily结束)
public int devide(int x, int y)
{
int result = x/y; // 实际发生异常点, 为什么异常不在这里处理(当然确实不应该在这里做出处理)
这里应该是使用了引用变量(int reslut = new Test().devide( 3, 0 ); // 调用点)
本人的一点拙见— —
打错了几个字,没什么难懂吧!楼主想知道返回什么,怎么返回不就是得从原理的角度分析吗
为什么异常处理的编写被放在了调用方法的方法里, 而不是在实际发生异常情况的发生地
==============================================================================
千万不要告诉我你觉得异常是在int result = x/y;这里发生的
如果没有赋值,这个怎么会是异常,而且,这个不是程序的执行,只是方法的定义,而异常是在执行过程中才会有的!
感谢各位的支持, 在此拜过.
祝大家在新的一年里, 身体健康, 万事如意.
鞠躬.