A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马王冬冬 中级黑马   /  2012-7-18 00:28  /  1560 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码
以上代码运行时会出现异常信息,我大概已经明白原因所在,但还是理解的不太清楚,哪位同学能帮我细致的讲解一下吗?

4 个回复

倒序浏览
应该是 21行出错吧 s[0].setName(sc.next());

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

你在21 行用 s[0] 其实就是null 对象 当然不能用来调用方法了
应先创建一个对象放入数组 : s[0] = new Student()
回复 使用道具 举报
student[] s = new student[1];是相当于new了一个Student的数组,然而你在输入信息时,并没有添加对象,即s为空,所以会出现空指针异常
回复 使用道具 举报
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:15
正解O(∩_∩)O哈!赞一个~  发表于 2012-7-18 02:06

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
首先要先了解空指针异常:
空指针异常发生在对象为空,但是引用这个对象的方法。例如:String s = null; //对象s为空(null)int length =  s.length();//发生空指针异常

1:所以肯定你定义的摸个对象为空,此代码中也就定义了 student[] s = new student[1];  s对象,可见s对象为空的。
2:此对象是个数组对象,再想想定义数组对象的时候都会有初始值,初始值是根据类型而定的,你并没有给 s 赋值,所以为 null ;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马