下面代码编译通过,运行时出现异常,class word 
{public int code;
 public String name;
 word (){
 this.code=0;
 this.name="";}
 public void setCode (int i){
 code=i;}
 public int getCode () 
 {return code;}
 public void setName (String s){
 name=s;}
 public String getName (){
 return name;}
 }
public class Test 
{
public static void main(String[] args) 
{   word words[]=new word[12];
    words[0].setName("afjklj");//运行时这句出现:java.lang.NullPointerException

}
}

解决方案 »

  1.   

    word words[]=new word[12];
          word[0]=new word();
        words[0].setName("afjklj");

    }
      

  2.   

    word words[]=new word[12];只是指定数组words[]的长度,并没有给数组付值!
      

  3.   

    加上word words[0]=new word();就不会错了
      

  4.   

    楼上正确
    没给words[]数组初始化
      

  5.   

    word words[]=new word[12];
    告诉我们words这个数组对象已经有了,
    并不说明words[i]这些对象也有了!
      

  6.   

    同意楼上的word words[]=new word[12];  它只是创建了一个数组对象words而数组中的每个元素又是一个word对象你上面出现的问题是没对数组对象words的每个元素words[i]实例化
      

  7.   

    这个涉及到数组声明与对象的分配了当你 Object[] myObject = new Object[10];的时候,只是告诉编译器你它给你分配10个Object对象的空间,也就是说内存地址为你留出来了,
    但是这些地址上的对象还没有实例化,你用myObject[0]来调用,肯定报空对象异常但是基础数据为什么可以呢
    那就是默认初始化的关系啦
    你在声明
    int[] myInt = new int[10];的时候,0就被赋上了
    但是对象就不能这么做,对象就要初始化
    试试下面的,然后把Integer改成int,
    /*
     * @(#)ArrayInit.java
     * Have classes:
     * Copyright 2005 Fane. All rights reserved.
     * @author      Fane
     * @version     1.0.0.0, 2005-11-10
     * @since       JDK 1.5
     */
    package person.fane.test;public class ArrayInit
    {
    public static void main(String[] args)
    {
    Integer[] myInteger = new Integer[10];

    System.out.println("The first is : " +myInteger[0].toString());
    }
    }
      

  8.   

    word words[]=new word[12];这句执行完之后,
    从words[0]到words[11]里面放的都是null,
    你对nullsetName("afjklj")当然是不行了。建议楼主去看一看thinking in java 
    这方面有很详细的讲解。
      

  9.   

    word words[]=new word[12];你这条语句这是说:现在创建一个word对象引用的数组,注意是对象引用,这个数组的长度是12,就是说你可以放十二个word的对象在里面,不过你现在还没有给这个数组放入这些对象,你下一步应该创建十二个word对象,并放到这个数组里面。好了,结果你下一步没有创建对象并放到word数组里面(此时的word里面的引用都是null的,就是没有指向任何word对象),就开始使用words[0].setName("afjklj");尝试调用数组中的第一个对象,当然就失败了(NullPointerException,空指针错误)。如果你这样:
    words[0]=new word();
    然后words[0].setName("afjklj");    这样就没有错误了,因为你已经放了一个word对象到这个数组的第一位上。如果你继续调用:words[1].setName("afjklj");    这样又会错误,因为你没有为第二个创建一个对象,你刚才只是创建了第一个对象。呵呵,应该明白吧。创建对象的数组,你记住的是你应该为他们每个位置创建一个对象,然后放进去。