-1

首先我知道这一定很简单,我一直在尝试在 Stackoverflow.com 和 Google 上阅读类似的问题,但我仍然无法让我的程序正常工作。

我很快就编写了我的程序正在尝试做的事情的摘要:

    public class One{

    public One(){
        Two t = new Two(this);
    }

    public void doSomething(){
        sout("HERE");
    }

    public static void main(String[] args){
        One o = new One()
        Two t = new Two(o);
    }

}

    public class Two{

        public Two(One o){
            One o = o;
            o.doSomething();
        }
    }

当我运行程序时,我从方法调用 o.doSomething() 中得到一个 NullPointerException。我一直在尝试修复它,但我很难过。如果有人能快速告诉我修复它将不胜感激。

4

4 回答 4

5
One o = o;

我不知道这是什么意思,但它不会工作。这应该是成员变量(this.o)吗?为此,请将其放入类而不是函数中:

public class Two{
    private One o;

    public Two(One o){
        this.o = o;
        o.doSomething();
    }
}

如果您不需要它,或者完全删除它:

public class Two{
    public Two(One o){
        o.doSomething();
    }
}
于 2013-03-05T20:20:40.867 回答
0

我已经修改了你的课程请检查我认为它应该可以工作

公开课一{

public One(){
    Two t = new Two(this);
}

public void doSomething(){
    System.out.println("HERE");
}

public static void main(String[] args){
    One o = new One();
    Two t = new Two(o);
}  

}

public class Two{

    public Two(One one){
        One o = one; //just changed the parameter name to one
        o.doSomething();
    }
}
于 2013-03-05T20:22:54.177 回答
0

当你想引用当前对象时使用“this”这个词;此外,当您想访问当前对象的变量“something”时,可以使用“this.something”。

例如,您可以将其插入代码中以区分“this.o”(对象的属性)和“o”(输入参数):

import java.io.*;


public class One{
    public One(){
        Two t = new Two(this);
    }

    public void doSomething(){
        System.out.println("HERE");
    }

    public static void main(String[] args){
        One o = new One();
        Two t = new Two(o);
    }
}


public class Two{
    One o;

    public Two(One o){
        this.o = o;
        this.o.doSomething();
    }
}

这将编译并产生一个输出:

这里
这里

那是你要的吗?

于 2013-03-05T20:31:03.527 回答
0

该方法sout("HERE")不存在。如果您尝试将某些内容打印到控制台,则应使用System.out.println("HERE").

于 2013-03-05T20:18:59.910 回答