首先我知道这一定很简单,我一直在尝试在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。我已经尝试了一段时间来解决它,但我很难过。如果有人能够快速告诉我修复它将会非常感激。
答案 0 :(得分: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();
}
}
答案 1 :(得分:0)
方法sout("HERE")
不存在。如果您尝试将某些内容打印到控制台,则应使用System.out.println("HERE")
。
答案 2 :(得分:0)
我修改了你的课程,请检查我认为它应该有效
公共课一{{/ p>
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();
}
}
答案 3 :(得分: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();
}
}
这将编译并生成输出:
下面
该处
这就是你想要的吗?