ArrayDemo[] teachers=new ArrayDemo[2];//初始化ArrayDemo类型的数组,里面的对象都是空对象,而初始化时不会去new对象,怎么可能能使用teachers[0].name。ArrayDemo类型的数组只能存放ArrayDemo类型或者其子类对象,不要认为初始化数组后,里面的对象都new完了
所以,应该是 teachers[0] = new ArrayDemo();//需要自己创建对象,之后就能调用类的属性
空指针了。你定义teachers这个数组之后并没有往数组里传对象啊,所以teachers[0]这个位置上就是默认的null,null怎么能有name属性呢。所以就报错了。
public class ArrayDemo {
String name = "sun";
public static void main(String[] args) {
ArrayDemo[] teachers = new ArrayDemo[2];//只是申请了一个内存空间,但是并没有存储数据,每个对象默认是null
ArrayDemo t1 = new ArrayDemo();
teachers[0] = t1;//为了避免对象元素为null , 所以初始化了第一个元素
System.out.println(teachers[0].name);
// ArrayDemo t2 = new ArrayDemo();
// t2.name = "tom";
// teachers[1] = t2;
// System.out.println(teachers[1].name);//初始化第二个元素
System.out.println(teachers.length);//虽然length是2,但注意此时teachers[1]=null
}
}
运行测试
sun
2
你只是创建了一个ArrayDemo数组对象,但是没有实例化
正确的如下ArrayDemo[] teachers=new ArrayDemo[2];
teachers[0] = new ArrayDemo();
teachers[1] = new ArrayDemo();
public class ArrayDemo {
String name="sun";
public static void main(String[] args) {
ArrayDemo[] teachers=new ArrayDemo[2];
teachers[0] = new ArrayDemo(); // 数组中存储的是引用,如果这个引用没有指向示例,那么就是空指针
System.out.println(teachers[0].name);
System.out.println(teachers.length);
}
}