下面代码编译通过,运行时出现异常,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
}
}
{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
}
}
word[0]=new word();
words[0].setName("afjklj");
}
没给words[]数组初始化
告诉我们words这个数组对象已经有了,
并不说明words[i]这些对象也有了!
但是这些地址上的对象还没有实例化,你用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());
}
}
从words[0]到words[11]里面放的都是null,
你对nullsetName("afjklj")当然是不行了。建议楼主去看一看thinking in java
这方面有很详细的讲解。
words[0]=new word();
然后words[0].setName("afjklj"); 这样就没有错误了,因为你已经放了一个word对象到这个数组的第一位上。如果你继续调用:words[1].setName("afjklj"); 这样又会错误,因为你没有为第二个创建一个对象,你刚才只是创建了第一个对象。呵呵,应该明白吧。创建对象的数组,你记住的是你应该为他们每个位置创建一个对象,然后放进去。