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.
}