猿问

从另一个类访问方法,NullPointerException

所以我一直在绞尽脑汁想为什么这现在一个小时都不起作用。我有两个类,一个类包含一个 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 class






public 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 的实例时,数据库实例为空。


繁星淼淼
浏览 132回答 1
1回答

汪汪一只猫

问题出在以下几行public class Two{&nbsp; &nbsp; &nbsp;One database;&nbsp; &nbsp; &nbsp;public Two()&nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; One database = new One();&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //this variable is not the same as the one declared outside the constructor&nbsp; &nbsp; &nbsp;}当在方法中声明与类中声明的变量同名的变量时,在方法内声明的变量上发生的修改不会在方法外的变量中看到(因为两个变量不同)。方法中的变量正在隐藏类中的变量。要区分这两个变量,您必须使用this关键字this.database = new One();最终解决方案应该是public class Two{&nbsp; &nbsp; &nbsp;One database;&nbsp; &nbsp; &nbsp;public Two()&nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; this.database = new One();&nbsp;&nbsp; &nbsp; &nbsp;}执行database.addElement(name);时出现NullPointerException的原因;是因为在您的示例中,数据库未实例化,因为创建的对象存储在另一个名为database 的变量中,而不是声明为类属性的变量中。
随时随地看视频慕课网APP

相关分类

Java
我要回答