而是先返回调用点, 再进行处理. 它是怎样返回的, 怎样返回错误信息(通过哪条通道, 返回的对象是谁, 接收错误信息的是那个对象), 可以肯定的是它没有使用return.

解决方案 »

  1.   

    class Test
    {
    public int devide(int x, int y)
    {
    int result = x/y;  // 实际发生异常点, 为什么异常不在这里处理(当然确实不应该在这里做出处理)当然不应该在这里处理,你看清楚了,这个是定义devide方法的,并不会导致异常int reslut = new Test().devide( 3, 0 );  //这个是导致异常的关键,所以从进入点捕捉异常并处理
      

  2.   

    个人觉得这样声明这个函数可能更加好点
    public int devide(int x,int y) throws ArithmeticException {}
    这样的话,调用者自然会捕捉这个异常!!小弟初学,不知道说的对否?
      

  3.   

    我同意楼主的观点,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语句执行,异常信息出栈输出,此时程序中止.
      

  4.   

    : love_xf() ( ) 信誉:100 芸芸几百字,我没怎么看懂!哈哈!不是取笑,是真的
      

  5.   

    推荐使用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 );  // 调用点)
    本人的一点拙见— —
      

  6.   

    to star_str(生命火花) :
    打错了几个字,没什么难懂吧!楼主想知道返回什么,怎么返回不就是得从原理的角度分析吗
      

  7.   

    首先感谢大家的支持, 我是个初学者, 学习编程的时间只有半年, 以后还请大家多多关照.我的观点是: 我现在捕获的是执行时异常, 而不是调用异常. 
    为什么异常处理的编写被放在了调用方法的方法里, 而不是在实际发生异常情况的发生地
    ==============================================================================
    千万不要告诉我你觉得异常是在int result = x/y;这里发生的
    如果没有赋值,这个怎么会是异常,而且,这个不是程序的执行,只是方法的定义,而异常是在执行过程中才会有的!
      

  8.   

    进行错误处理的传统方法是由被调用函数返回一个特殊代码来表示错误的发生, 而且调用方法对该返回值进行分析.    --摘自: <<Java核心技术部 卷I>>  P548
    感谢各位的支持, 在此拜过.
    祝大家在新的一年里, 身体健康, 万事如意. 
    鞠躬.