为什么返回不在Java中退出函数?

时间:2012-08-24 09:34:29

标签: java function conditional-statements

我在Java中遇到这个函数的问题。我不明白为什么当lastNodeAttributes==null为真时,执行会按原样跳转到return null;,但在此之后,它不会从函数返回而是直接跳转到最后的return fight...;。为什么第一次返回不退出但执行跳转到第二个条件部分返回?这怎么可能呢?请解释原因显然我不明白java工作的基础知识。

public Node undo() {
    Node lastNode=fight.getLastChild();
    NamedNodeMap lastNodeAttributes = lastNode.getAttributes();
    if(lastNodeAttributes == null) { return null; }
    else { 
        String lastNodeFighter = lastNodeAttributes.getNamedItem("fighter")
                                 .getNodeValue();
        String lastNodePoints = lastNodeAttributes.getNamedItem("points")
                                .getNodeValue();
        if(Integer.parseInt(lastNodeFighter) == 1) {
            fighter1score-=Integer.parseInt(lastNodePoints);    
        }
        else { fighter2score -= Integer.parseInt(lastNodePoints); }
        return fight.removeChild(fight.getLastChild());
    }
}

3 个答案:

答案 0 :(得分:0)

首先开始调试您的应用程序。可在此处找到一个好的调试教程:http://www.vogella.com/articles/EclipseDebugging/article.html

验证lastNodeAttributes是否为空。还要检查,如果方法可能执行两次,在第一种情况下lastNodeAttributes为null,在第二种情况下则不是。

答案 1 :(得分:0)

你所描述的是不可能的。返回语句确实总是返回所陈述的内容。您可能会在调试器中看到

的行为
  • 您没有调试您认为正在调试的代码。调试器可能正在加载与您想象的不同的类。尝试清理并重新编译代码并再次调试。
  • 代码在发布模式下编译,并且已经切换了您的语句。在具有优化代码的发布模式下进行调试有时可以关闭调试器,以便在调试器中执行错误的语句而不是实际执行的语句。您确定要调试的代码未经优化。
  • 如果不仔细考虑,线程问题也会导致奇怪的跳跃。如果在返回语句和多个线程上都有断点,则一个线程可能会在第一个返回时返回,然后另一个线程可能会在第二个返回时返回。这没有错,它只是调试多线程应用程序的工作方式。

检查实际返回值还将确认实际上只执行了一个return语句。通过将断点放在调用者而不是被调用者

来执行此操作

答案 2 :(得分:-1)

返回会退出该方法。检查您是否正在使用最新的编译类。 尝试做一个干净的构建。 从第一行开始调试,确保您没有运行两次相同的方法。 如有疑问,请在课程开头添加system.out,以确保检查正确的班级版本