【问题标题】:Why does my java method excute lines after a return statement?为什么我的 java 方法在 return 语句之后执行行?
【发布时间】:2019-09-26 16:38:39
【问题描述】:

我正在学习 Java 中的 xml 解析教程(ThinMatrix 在 .youtube 上),并试图通过逐步了解代码的工作原理。

    private static XmlNode loadNode(BufferedReader reader) throws Exception {
        String line = reader.readLine().trim();
        if (line.startsWith("</")) {
            return null;
        }
        String[] startTagParts = getStartTag(line).split(" ");
        XmlNode node = new XmlNode(startTagParts[0].replace("/", ""));
        addAttributes(startTagParts, node);
        addData(line, node);
        if (CLOSED.matcher(line).find()) {
            return node;
        }
        XmlNode child = null;
        while ((child = loadNode(reader)) != null) {
            node.addChild(child);
        }
        return node;
    }

在这个块中,第一个“if语句”第一次执行——即解析器第一次读取结束标记——执行“return null”行,然后程序跳转到while语句方法的底部。我以前没有见过这种行为——为什么程序在“return null”语句之后没有退出方法。

【问题讨论】:

  • 通过调试器运行它。有可能,因为您使用递归,返回语句 工作正常,而代码在其他地方搞砸了。
  • 这个问题似乎更像是一个调试问题,而不是关于代码的真正问题,所以它仍然是一个学习机会,即使它不是严格关于代码的。
  • @computercarguy 是的,我实际上想知道这是否是出于这个原因提出这个问题的正确地方 - 是否删除了更多关于澄清误解而不是修复代码的问题?
  • @TylerGoodwyn,实际上我试图阻止人们对这个问题投票,而不是给你建议。很抱歉造成混乱。

标签: java xml methods return return-value


【解决方案1】:

为什么程序在“return null”语句后没有退出方法?

方法return null 语句之后退出。这与退出的 程序 不同。通常,在递归方法中,同一方法有多个“副本”同时运行(彼此内部)。因此,对loadNode() 的内部函数调用之一在return null; 语句处退出,而loadNode() 调用是通过while((child = loadNode(reader)) != null) 语句处的“外部”方法调用进行的。

递归可能有点棘手:)

【讨论】:

  • 是的 - 我在那个电话上看到了隧道视野,忘记了它在技术上仍处于 while 循环中 - 谢谢!
【解决方案2】:

我感觉你的调试中断是在“return null;”上。行而不是它上面的 IF 语句,因此您实际上并没有在第一次迭代时中断。这意味着当它返回 null 时,调试器会返回到调用该方法实例的代码行,即 WHILE 行。

如果“节点”中有内容或将调试器断点更改为该方法的第一行,您也许可以验证这一点。

【讨论】:

  • 这正是发生的事情……现在明白了,谢谢!
  • @TylerGoodwyn,不要忘记为您喜欢的任何答案投票。由于您的评分较低,接受答案的“绿色检查”可能不会立即显示,但您应该点击实际回答您问题的答案旁边的那个,无论它是不是我的。
猜你喜欢
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多