[Java基础] 创建一个对象数组

先从一段错误的代码切入,然后在后面提出正确的创建方法。

先考虑这段代码:

public class Student {

    private int age;
    private String name;

    public void Student() {
        this.age = 21;
        this.name = "someone";
    }

    public void setAge (int age) {
        this.age = age;
    }

    public int getAge() {
        return this.age;
    }
}
public class Test {

    public static void main(String[] args) {

        Student[] students = new Student [3]; 

        students[0].setAge(18);  

        System.out.println(students[0].getAge());
    }
}

运行结果如下,是一个空指针异常:

Exception in thread “main” java.lang.NullPointerException
at Test.main(Test.java:7)

分析原因

Student[] students = new Student [3]; 这一句创建了三个Student的引用,但并没有调用Student的构造方法,等价于,

Student s1;
Student s2;
Student s3;

因此,s1, s2, s3的对象实际上并没有被创建,在内存上也没有一块对应的空间。那么在对象还没有被创建之前,我们自然是不可以调用它的任何方法的。

正确的对象数组创建方法

public class Test {

    public static void main(String[] args) {

        int i;

        Student[] students = new Student [3]; 

        //实例化每一个元素
        for (i = 0; i < students.length; i++) {
            students[i] = new Student();
        }

        students[0].setAge(18);  
        students[1].setAge(30); 
        students[2].setAge(25); 

        System.out.println(students[0].getAge());
        System.out.println(students[1].getAge());
        System.out.println(students[2].getAge());
    }
}

运行结果:

18
30
25

思考

现在我们知道,在使用new关键字声明一个对象数组时需要再将其实例化。那么为什么当我们声明一个基础数据类型的数组时比如:

int[] a = new int[5];

就不需要将Integer类创建一个对象呢?我猜测应该是在编译的过程中,编译器会对new关键字之后的基础数据类型,如int,double,String自动加上其构造函数,只是我们作为用户对这个过程并不可见。在网上尝试找相关资料,但没有找到,看来我还是太菜了。

参考资料:

http://stackoverflow.com/questions/5364278/creating-an-array-of-objects-in-java

  • 26
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值