java - 你能帮我理解这段Java代码吗?

标签 java xml

我正在开发一个需要加载 XML 文件的小项目。我发现了一个很好的代码示例,它扩展了 DefaultHandler 并使用自定义 TreeRender 将 XML 格式化为 TreeView here 。代码编译并运行(总是一个优点)并为我提供了我正在寻找的起点,但代码中有一点我不明白。

这是我没有得到的代码片段:

public class XmlTreeView extends DefaultHandler {

private DefaultMutableTreeNode _base;

<snip>

@Override
public void startElement(String uri, String localName, String tagName, Attributes attr) throws SAXException {
    System.out.println("startElement: uri=" + uri + " localname=" + localName + " tagName=" + tagName );

    DefaultMutableTreeNode current = new DefaultMutableTreeNode(tagName);
    _base.add(current);
    _base = current;
    for (int i = 0; i < attr.getLength(); i++) {
      // <snip> attribute processing
    }
}

该类声明了一个名为 _base 的 DefaultMutableTreeNode。 startElement() 方法实例化一个名为 current 的新 DefaultMutableTreeNode,然后执行

_base.add(current);
_base = current;

我所有的编程知识告诉我,第二条语句将新对象(当前)分配给 _base“变量”,使得第一条语句毫无用处。但是,如果我删除第一条语句,代码将不再正常工作。事实上,如果我删除任何一条语句,它就不再正常工作。要将元素添加到树中,这两个语句都是必需的。

你能向我解释一下这里发生了什么吗?我就是不明白。

提前致谢,

史蒂夫

最佳答案

_base 是对对象的引用。当您说_base.add(current)时,您正在调用一个对该对象进行一些更改的方法。然后,当您说 _base = current; 时,_base 将成为对不同对象的引用。但第一个物体仍然存在。如果在其他地方有对它的引用,那么您对其所做的任何更改仍然会影响程序的其余部分。

关于java - 你能帮我理解这段Java代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18604045/

相关文章:

java - 有没有办法存储 POM 文件中的启动配置,以便将它们导入到 Eclipse 和 Idea 中?

php - 在 PHP 中从 MySql 获取存储的 xml 代码

xml - 如何从 wso2 中的 xml 中检索元素的 namespace

android - 我如何为我的 android 应用程序设计漂亮的 UI

javascript - nodejs 使用 cheerio 解析 xml 返回空 CDATA

java - 忽略导入语句中的弃用类型警告

java - Gradle Jar 依赖错误

c#(更具体地说是 xna)如何通过 http 请求 xml 文件?不需要支持 xbox

java - 使用 gradle 将 pom.xml 包含在 Jar 中

java - 正则表达式检查字母表中的所有字母