Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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,空指针异常何时发生 无论何时调用实例方法或访问引用(指向)null的引用变量上的实例字段,我都不明白您为什么期望NullPointerException。 基本上你只是想说: c3=null 如果您想要NPE,您可以这样做: c3=null c3.go(c2) 在这里,c3是空的,因此这将抛出一个NPE,因为您正在尝试这样做: null.go(…) 注释行中没有NPE,因为c1和c2不为空。此外,在go方法中,cb变量设置为null,但这不会影响实际对象 class CardBoard

空指针异常何时发生


无论何时调用实例方法或访问引用(指向)null的引用变量上的实例字段,我都不明白您为什么期望NullPointerException。
基本上你只是想说:
c3=null

如果您想要NPE,您可以这样做:
c3=null
c3.go(c2)

在这里,c3是空的,因此这将抛出一个NPE,因为您正在尝试这样做:

null.go(…)

注释行中没有NPE,因为
c1
c2
不为空。此外,在
go
方法中,
cb
变量设置为
null
,但这不会影响实际对象

class  CardBoard    
{  
    Short  story = 200;  
    CardBoard  go(CardBoard cb)
    {
        cb = null;  
        return cb;  
    }  

    public static void main(String[] args)   
    {  
        CardBoard  c1 = new  CardBoard();  
        CardBoard  c2 = new  CardBoard();  
        CardBoard  c3 = c1.go(c2);   
        //  expecting  null  pointer  exception      
        c1  =  null;  
        // do stuff;  
    }   
}  
这些线之后的情况是:

CardBoard  c1 = new  CardBoard();  
CardBoard  c2 = new  CardBoard();  
CardBoard  c3 = c1.go(c2);   
那你为什么要得到NPE呢

你必须了解什么是推荐信!在调用
go(c2)
和方法中将参数设置为
null
时,将对象传递给方法不会影响原始对象实例

就像:

c1 != null
c2 != null
c3 == null
导致

object c1 = new object();
object c2 = c1;

c1 = null
现在,试试:

c1 == null
c2 != null // !!!
看看会发生什么…;) 你会得到你的NPE足够肯定


(您必须实际使用null指针来获取异常)

只有当您尝试访问引用不指向任何内容(即null)的任何方法或变量时,才会发生NullPointerException

我已对您的代码进行了更改以获取NullPointerException:

public static void main(String[] args)   
{  
    CardBoard  c1 = new  CardBoard();  
    CardBoard  c2 = new  CardBoard();  
    CardBoard  c3 = c1.go(c2);   
    //  expecting  null  pointer  exception      
    c1  =  null;  
    c3.go(c2);
}
}例如

class CardBoard {
Short story = 200;

CardBoard go(CardBoard cb) {
    cb = null;
    return cb;
}

public static void main(String[] args) {
    CardBoard c1 = new CardBoard();
    CardBoard c2 = new CardBoard();
    CardBoard c3 = c1.go(c2);
    // expecting null pointer exception
    c1 = null;

    // If you try to call a method or access any member variable with null reference you will get the exception
    c3.story = 20; //NullPointerException will occur

    // do stuff;
}
假设在代码中的某个地方,确实如此

applea

Mango-m

如果试图使用此变量
a
m
访问类成员

Class Apple
{
 void applePrint()
 {
  System.out.println("Apple");
 }
}

Class Mango
{
 void mangoPrint()
 {
  System.out.println("Mango");
 }
}
它将抛出NPE

i、 e.定义类对象的引用变量,但不实际创建它们

Apple a=新苹果()
Mango m=newmango()

[我刚接触Java时就做了很多]

a.printApple(); or m.printMango();
当您在
c3
上调用
go()
方法时,您将得到
NullPointerException


当您为那些分配给
null

引用变量调用方法时,您将得到
NullPointerException
。为什么这里会有NPE?您只有在实际尝试调用c3上的方法时才会得到NPE-不仅仅是为了给它分配null。还有代码吗?@dystroy抱歉,我是个新手对于java,你能告诉我它通常在什么时候发生吗?我不想粗鲁,但如果你想知道NPE通常在什么时候发生的一般答案,那么它不是正确的站点。试试谷歌。非常感谢你,先生@欢迎你:)欢迎你:)非常感谢你,先生@欢迎你!。另一方面,请阅读
HeadFirst Java
,它有助于澄清简单的概念
public static void main(String[] args)   
{  
    CardBoard  c1 = new  CardBoard();  
    CardBoard  c2 = new  CardBoard();  
    CardBoard  c3 = c1.go(c2);   // go method is returning 'null' so c3=null
    //  expecting  null  pointer  exception      
    c1  =  null;  
    c3.go(c2);  // you will get NullPointerException here.
}