【问题标题】:Nullpointer exception Java空指针异常 Java
【发布时间】:2013-05-19 18:40:07
【问题描述】:

我是 Java 初学者,我对 null 有一些问题。我需要帮助来理解以下问题。我已经正确回答了他们,但我不知道他们背后的确切原因。

问题:

假设轨道已被声明为 ArrayList 类型并考虑以下情况:

public Track mostPlayed() {
    Track most = tracks.get(0);
    int i = 1;
    while(i < tracks.size()) {
        Track t = tracks.get(i);
        if (t.getPlayCount() > most.getPlayCount()) {
             most = t;
        }
        i++;
    }
return most;
}

假设在执行mostPlayed 方法期间抛出了NullPointerException。假设单线程执行,由于此异常,只有以下代码行之一是可能的。哪一个?

我选择了第 2 行,因为它似乎是唯一合乎逻辑的答案,但由于我不完全理解这个概念,所以我想进一步解释它。

【问题讨论】:

  • 请不要在您的复制数据中包含行号,并使用代码按钮格式化您的代码。我编辑了你的问题
  • Ontopic:如果有异常,异常信息中会有行号。
  • 您好,对不起,我是该网站的新手。感谢您的编辑。
  • 这就是为什么我在每一行都写了数字,这样问题就更容易理解了。基本上我选择的正确答案是 Track most = tracking.get(0);不完全确定为什么
  • @fge: 第一首曲目之前没有被拍过两行,所以tracks.get(i) 是正确的方法。

标签: java exception null nullpointerexception


【解决方案1】:

t.getPlayCount() 如果 ArrayList 轨道在某个索引处包含“null”,则可以抛出 NullPointerException。

如果轨道未初始化,Track most = tracks.get(0); 也会抛出 NullPointerException。

【讨论】:

    【解决方案2】:

    Track most = tracks.get(0); 行可以抛出 NullPointerException,因为代码不会显示 track 是否已初始化。如果不是,则为null,并且null 中没有方法get(实际上根本没有方法)。

    【讨论】:

    • cant line 6 'tracks.get(i)' 也因为同样的原因而为空?
    • 是的,但它不能提出NullPointerException,因为tracks.get(0) 已经做到了。
    • 谢谢你说得对,你能帮我看看类似的问题吗?关于 null 和运行时错误:stackoverflow.com/questions/16638349/runtime-error-java
    【解决方案3】:

    Java 是一种面向对象的编程语言,对象是基本的构建块。

    在许多现实生活中,存在无法创建对象的情况。

    空对象代表一个特殊值,表示该对象不存在。

    例如,如果我说Person p;。此时java会将空值赋给p。现在,如果我尝试类似 p.getName() 的东西,显然 java 将无法给我这个人的名字,因为我从未创建过这个人。因此,每当您尝试使用为 null 的变量访问某些内容时,java 都会引发错误。

    如果您需要更好地理解,有很多资源涵盖了这个主题。请注意,使用像 null 这样的默认/占位符值是一个非常常见的概念,即使在非面向对象的语言中也是如此。

    对于您上面的问题。曲目可以为空,因为有人可以只使用 ArrayList&lt;Tracks&gt; tracks 而从不使用 new 关键字对其进行初始化。

    此外,您还可以使用tracks.add(null); 将空值存储到列表中。因此,当您执行 tracks.get(i) 时,您可能会收到一个空值。

    如上所述,调用getgetPlayCount() 会因此导致空指针异常。

    我强烈建议您阅读一些关于 Java 的介绍性材料,因为我相信这些材料会彻底讨论这个主题。

    【讨论】:

      猜你喜欢
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      相关资源
      最近更新 更多