Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么此函数调用中存在NullPointerException?_Java_Nullpointerexception - Fatal编程技术网

Java 为什么此函数调用中存在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()); }

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());
 }
}

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();
 }