黑马程序员技术交流社区

标题: 关于程序中空指针异常的问题 [打印本页]

作者: 黑马王冬冬    时间: 2012-7-18 00:28
标题: 关于程序中空指针异常的问题
  1. import java.util.*;

  2. class student
  3. {
  4.   private String name;

  5.   void setName(String name)
  6.   {
  7.     this.name = name;
  8.   }
  9. }

  10. class test
  11. {
  12.   public static void main(String[] args)
  13.   {
  14.     student[] s = new student[1];
  15.     Scanner sc = new Scanner(System.in);

  16.     System.out.println("Enter the name of student: ");
  17.     s[0].setName(sc.next());
  18.   }
  19. }
复制代码
以上代码运行时会出现异常信息,我大概已经明白原因所在,但还是理解的不太清楚,哪位同学能帮我细致的讲解一下吗?


作者: 丁二跃    时间: 2012-7-18 00:47
应该是 21行出错吧 s[0].setName(sc.next());

student[] s = new student[1];
你只是new了一个数组,这个数组里 应该放 student 对象, 但是现在数字里 还是空的 默认为null

你在21 行用 s[0] 其实就是null 对象 当然不能用来调用方法了
应先创建一个对象放入数组 : s[0] = new Student()
作者: 乞文超    时间: 2012-7-18 01:01
student[] s = new student[1];是相当于new了一个Student的数组,然而你在输入信息时,并没有添加对象,即s为空,所以会出现空指针异常
作者: 张世威    时间: 2012-7-18 01:52
import java.util.*;

class student
{
  private String name;

  void setName(String name)
  {
    this.name = name;
  }
}

class test
{
  public static void main(String[] args)
  {
    student[] s = new student[1];
    Scanner sc = new Scanner(System.in);

    System.out.println("Enter the name of student: ");
    s[0].setName(sc.next());
  }
}

1:你定义了一个数组, student[] s = new student[1],他的长度为1:就像你拿一个箱子出来,它里面只有一个可以装苹果的盒子。 这时候,箱子还是空的,什么都没有。
2、s[0] 代表箱子里面的一个盒子,s[0].setName(sc.next()),这句话就像你伸手到空箱子里面,把空盒子拿出来,给盒子里面的苹果取个名字,而苹果还没有放进去啊,哥们,你拿的是空气了。
3、自然报java.lang.NullPointerException 了,你可以在使用前,先  s[0]=new Student();
4、空指针异常告诉我们:要先劳动,在索取,不然你只能拿空气了。哥们,赶快往箱子里面装苹果吧,哈哈



  

作者: 高欢欢    时间: 2012-7-18 07:14
首先要先了解空指针异常:
空指针异常发生在对象为空,但是引用这个对象的方法。例如:String s = null; //对象s为空(null)int length =  s.length();//发生空指针异常

1:所以肯定你定义的摸个对象为空,此代码中也就定义了 student[] s = new student[1];  s对象,可见s对象为空的。
2:此对象是个数组对象,再想想定义数组对象的时候都会有初始值,初始值是根据类型而定的,你并没有给 s 赋值,所以为 null ;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2