所以我一直在绞尽脑汁想为什么这现在一个小时都不起作用。我有两个类,一个类包含一个 ArrayLists 的 ArrayList 和一个将另一个元素添加到该列表的方法,另一个是我试图从中访问该方法的类。 public class One{ private ArrayList<Element> myarraylist; public One() { myarraylist = new ArrayList<Element>(); } public void addElement(String name) { myarraylist.add(new Element(name)); }}//Element being another classpublic class Two{ One database; public static void main(String[] args) { Two two = new Two(); two.startMenu(); } public Two() { One database = new One(); } public void addElem() { Scanner keyboard = new Scanner(System.in); String name = keyboard.next(); database.addElement(name); }}//where startMenu is just a small multiple choice menu thingy问题是,当我尝试运行它并到达最后一行时,我收到消息:java.lang.NullPointerException我尝试检查对象(我使用 BlueJ),当我创建类 One 的实例时初始化了 ArrayList,但是当我创建类 2 的实例时,数据库实例为空。
1 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
问题出在以下几行
public class Two
{
One database;
public Two()
{
One database = new One();
//this variable is not the same as the one declared outside the constructor
}
当在方法中声明与类中声明的变量同名的变量时,在方法内声明的变量上发生的修改不会在方法外的变量中看到(因为两个变量不同)。方法中的变量正在隐藏类中的变量。要区分这两个变量,您必须使用this关键字
this.database = new One();
最终解决方案应该是
public class Two
{
One database;
public Two()
{
this.database = new One();
}
执行database.addElement(name);时出现NullPointerException的原因;是因为在您的示例中,数据库未实例化,因为创建的对象存储在另一个名为database 的变量中,而不是声明为类属性的变量中。
添加回答
举报
0/150
提交
取消