[Java基础] 创建一个对象数组
来源:互联网 发布:sha-256算法 编辑:程序博客网 时间:2024/06/06 09:03
先从一段错误的代码切入,然后在后面提出正确的创建方法。
先考虑这段代码:
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()); }}
运行结果:
183025
思考
现在我们知道,在使用new关键字声明一个对象数组时需要再将其实例化。那么为什么当我们声明一个基础数据类型的数组时比如:
int[] a = new int[5];
就不需要将Integer类创建一个对象呢?我猜测应该是在编译的过程中,编译器会对new关键字之后的基础数据类型,如int,double,String自动加上其构造函数,只是我们作为用户对这个过程并不可见。在网上尝试找相关资料,但没有找到,看来我还是太菜了。
参考资料:
http://stackoverflow.com/questions/5364278/creating-an-array-of-objects-in-java
0 0
- [Java基础] 创建一个对象数组
- 创建一个java对象放到数组当中
- java创建对象数组
- java基础之对象数组
- Java基础之对象数组
- java基础之一 数组、对象
- Java面向对象基础--对象数组
- OC基础 -- 类创建一个对象
- 创建一个数组,数组中有三个对象
- 关于JAVA类对象数组的创建
- Java String数组对象的创建测试
- JAVA学习(8)创建对象数组
- java中怎么创建对象数组
- JAVA基础---数组的创建及遍历
- 【Java基础一】String创建对象"" && null
- JAVA基础--类加载&对象创建过程
- JAVA基础--类加载&对象创建过程
- 对象创建次数---Java基础044
- OpenCV--滑动条的创建-creatTrackbar() [addWeighted()]
- 应用集成实战系列:服务总线中的异步业务交互模式
- 【数据结构】-线性表-链表-1326:链表的基本操作【好题】
- signal check
- 自定义ViewGroup之TagLayout
- [Java基础] 创建一个对象数组
- 【BZOJ 1299】[LLH邀请赛]巧克力棒 博弈论
- 史上最全的微信小程序代码大全
- 一个基于Python的文本处理程序
- jzoj 4941. 【GDKOI2017模拟1.13】宝石魔术 生成函数
- C++标准模板库基础练习(必会)
- 一天一点android知识(Broadcast)
- test
- Oracle