为了账号安全,请及时绑定邮箱和手机立即绑定

从另一个类访问方法,NullPointerException

从另一个类访问方法,NullPointerException

繁星淼淼 2022-01-12 16:45:04
所以我一直在绞尽脑汁想为什么这现在一个小时都不起作用。我有两个类,一个类包含一个 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 的变量中,而不是声明为类属性的变量中。


查看完整回答
反对 回复 2022-01-12
  • 1 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信