空指针异常Java



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

问题:

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

t.getPlayCount()可以抛出一个NullPointerException,如果ArrayList轨道包含一个'null'在某些索引。

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

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

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

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

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

例如,如果我说Person p;。此时,java将给p赋空值。现在,如果我尝试p.getName(),显然java将无法给我该人的名字,因为我从未创建过一个。因此,当你试图使用null变量访问某些东西时,java就会抛出一个错误。

如果您需要更好的理解,有很多关于这个主题的资源。请注意,使用默认的/占位符值,如null,是一个非常常见的概念,甚至在非面向对象语言中也会使用。

对于你上面的问题。轨道可以是空的,因为有人可以只做ArrayList<Tracks> tracks,而不使用new关键字初始化它。

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

正如上面所解释的,调用getgetPlayCount()会导致空指针异常。

我强烈建议您阅读一些Java的介绍性材料,因为我相信这个主题将在这些材料中得到深入的讨论。

最新更新