Java 为什么此函数调用中存在NullPointerException?
NullPointerException发生在Java 为什么此函数调用中存在NullPointerException?,java,nullpointerexception,Java,Nullpointerexception,NullPointerException发生在test1()调用中,但我无法理解背后的原因。m\u foo不是应该在应该首先计算的getNumbers()中实例化吗?空指针出现在 public class Bar { private Foo m_foo; private int getNumbers(){ m_foo=new Foo(); return 5; } public void test1(){ m_foo.print(getNumbers()); }
test1()
调用中,但我无法理解背后的原因。m\u foo
不是应该在应该首先计算的getNumbers()
中实例化吗?空指针出现在
public class Bar {
private Foo m_foo;
private int getNumbers(){
m_foo=new Foo();
return 5;
}
public void test1(){
m_foo.print(getNumbers());
}
}
public class Foo {
public void print(int x){
System.out.println(x);
}
}
public class Main {
public static void main(String args[]){
new Bar().test1();
}
}
因为m_foo是在getNumbers方法中初始化的,并且在调用test1之前从未调用过它
Java按从左到右的顺序执行语句。所以首先
它将检查m_foo对象。在构造函数中实现这一点的理想方法
酒吧的
NullPointer出现在
public class Bar {
private Foo m_foo;
private int getNumbers(){
m_foo=new Foo();
return 5;
}
public void test1(){
m_foo.print(getNumbers());
}
}
public class Foo {
public void print(int x){
System.out.println(x);
}
}
public class Main {
public static void main(String args[]){
new Bar().test1();
}
}
因为m_foo是在getNumbers方法中初始化的,并且在调用test1之前从未调用过它
Java按从左到右的顺序执行语句。所以首先
它将检查m_foo对象。在构造函数中实现这一点的理想方法
酒吧的
你们看过字节码了吗?你们可能会发现这个问题很有帮助。简言之,Java通常从左到右求值语句,因此在调用
getNumbers()
在无参数CTor中创建m\u foo之前,将解析m\u foo
。你开始使用它的方式太早了:-)@Geek,这与这个问题并不相关。OP询问语句中表达式求值顺序的一个小案例。你在挑剔他们用来给出这个问题示例的假设代码的语义。你看过字节码了吗?你可能会发现这个问题很有帮助。简言之,Java通常从左到右求值语句,因此在调用getNumbers()
在无参数CTor中创建m\u foo之前,将解析m\u foo
。你开始使用它的方式太早了:-)@Geek,这与这个问题并不相关。OP询问语句中表达式求值顺序的一个小案例。你在挑剔他们用来给出这个问题示例的假设代码的语义。这或多或少是对OP在他们的问题中已经陈述的内容的重述。如上所述,OP希望在调用m_foo.print
之前,通过test1
中的getNumbers
初始化m_foo
。他们的问题是为什么不是这样,而不是为什么NPE会发生。@Brian是的,但我的目的只是以不同的方式解释,以便理解,这或多或少是对OP在他们的问题中已经陈述的内容的重述。如上所述,OP希望在调用m_foo.print
之前,通过test1
中的getNumbers
初始化m_foo
。他们的问题是为什么不是这样,而不是为什么NPE会发生。@Brian是的,但我的目的只是以不同的方式解释,以便理解,
public Bar(){
m_foo=new Foo();
}