黑马程序员技术交流社区
标题:
程序运行过程中出现了空指针异常
[打印本页]
作者:
张超超
时间:
2012-4-18 18:20
标题:
程序运行过程中出现了空指针异常
class Person
{
String name;
int age;
/*
public void eat()
{
//System.out.println("年龄:"+p2.age);
//System.out.println("姓名:"+p2.name);
System.out.println("正在吃饭!");
}
*/
}
public class Test
{
public static void main(String[] args)
{
Person p1 = null;
Person p2 = null;
p1 = new Person();
//p1.eat();
p1.name="李四";
p1.age= 23;
p1=p2;
System.out.println("姓名:"+p2.name);
System.out.println("年龄:"+p2.age);
p1=null;
}
}
运行这个程序时出现了空指针异常,本人新手求高手来解答。
作者:
chenwei
时间:
2012-4-18 18:26
p1=p2;
p2是null,
下面p2.name
p2.age就空指针异常了啊
应该是p2=p1;吧
作者:
光sail
时间:
2012-4-18 18:43
p1=p2的意思是p2指向的对象赋值给p1,y因为p2=null,所以p1=null;所以出现空指针异常,
想要把p1指向的对象赋值给p2,应该p2=p1.
作者:
方江
时间:
2012-4-18 18:44
嗯,其实就是。当你先new p1的person并给p1赋值的时候。p1已经有了年龄和姓名。
但当你p1=p2的时候。p2初始化默认为null.那么也就意味着再次给p1赋值为了null.
既然都是空,打印出来就是空指针异常了。
还有一点要注意,最好别在主函数class前面加静态。
代码如下:
class Person
{
String name;
int age;
/*
public void eat()
{
//System.out.println("年龄:"+p2.age);
//System.out.println("姓名:"+p2.name);
System.out.println("正在吃饭!");
}
*/
}
class Test
{
public static void main(String[] args)
{
Person p1 = null;
Person p2 = null;
p1 = new Person();
//p1.eat();
p1.name="李四";
p1.age= 23;
p2=p1;
System.out.println("姓名:"+p2.name);
System.out.println("年龄:"+p2.age);
p1=null;
}
}
作者:
陈坚
时间:
2012-4-18 19:02
p1 = new Person();//这里给p1分配了内存空间
p1.name="李四";//给p1的属性赋值
p1.age= 23;
当p1=p2时就将p1的值置空了(p2本身就为空,在内存中没有分配有存储空间),所以在p2.name时就会有空指针异常
作者:
马东华
时间:
2012-4-18 19:11
p1=p2;//意思是把p2的值赋给p1,而你的目的是把p1赋p2,所以,换一下 就对了 p2=p1;
System.out.println("姓名:"+p2.name);
作者:
李平
时间:
2012-4-18 19:38
p1 = new Person();但p2仍然是null
p1 = p2;意味着把 null 又赋给了p1
c此时p1为空,所以打印空指针异常了。
换成p2 = p1;
作者:
刘_浩
时间:
2012-4-18 20:47
哥们当然 是空的呀。你想想看,你是不是要把p1赋给p2呀,结果把p2赋给了p1。所以当然是空咯。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2