0

我是 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 行,因为它似乎是唯一合乎逻辑的答案,但我想进一步解释它,因为我不完全理解这个概念。

4

3 回答 3

4

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

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

于 2013-05-19T18:46:44.830 回答
0

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

于 2013-05-19T18:48:56.817 回答
0

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

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

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

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

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

对于你上面的问题。曲目可以为空,因为有人可以使用关键字ArrayList<Tracks> tracks进行初始化并且永远不会对其进行初始化。new

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

并且如上所述调用getorgetPlayCount()可能因此导致空指针异常。

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

于 2013-05-19T18:55:27.177 回答