上一篇:欲善其事,先利其器-数组类库 | 带你学《Java面向对象编程》之二十
【本节目标】
通过阅读本节内容,你将接触到接收可变参数的方法,并拓宽思维,了解到万物皆可成为数组的内在含义,学会创建对象数组。
方法可变参数
如果现在要求定义一个方法,这个方法可以实现任意多个整型数据的相加处理。这样的情况下最早的时候只能通过数组进行处理。
范例:传统实现
class ArrayUtil {
public static int sum(int [] data) {
int sum = 0 ;
for(int temp : data) {
sum += temp ;
}
return sum ;
}
}
public class ArrayDemo {
public static void main (String args[ ]) {
System.out.println(ArrayUtil.sum(new int [] {1,2,3})) ;
}
}
图一 执行结果一
虽然以上的程序可以实现任意多个数字的参数内容传递,但是与实际的要求并不符合,实际要求的是可以传递多个参数,而不是一个数组。从JDK1.5开始为了方便开发者进行可变参数的定义,对于方法的参数提供有新的支持了。
范例:采用可变参数
class ArrayUtil {
public static int sum(int … data) { //变种数组
int sum = 0 ;
for(int temp : data) {
sum += temp ;
}
return sum ;
}
}
public class ArrayDemo {
public static void main (String args[ ]) {
System.out.println(ArrayUtil.sum(1,2,3)) ;
System.out.println(ArrayUtil.sum(new int [] {1,2,3})) ;
}
}
图二 执行结果二
可变参数的最大作用在于,在以后进行一些程序类设计或者开发者调用的时候,利用此种形式就可以避免数组的传递操作了。可变参数的本质需要清楚的是:依然属于数组。
对象数组
在之前所接触到的都是基本数据类型定义的数组,但是在Java程序本身各种数据类型都可以成为数组类型,所以类也可以成为数组类型,而这样的数组就称为对象数组。对象数组的定义格式如下:
动态初始化:类 对象数组名称 [] = new 类 [长度] ,每一个元素的内容都是null ;
静态初始化:类 对象数组名称 [] =new 类 [] {实例化对象,实例化对象……} ;
范例:使用动态初始化定义对象数组
class Person {
private String name ;
private int age ;
public Person(String name ,int age) {
this.name = name ;
this.age = age ;
}
public String getInfo() {
return “姓名:” + this.name + “、年龄:” + this.age ;
}
//setter、getter略
}
public class ArrayDemo {
public static void main (String args[ ]) {
Person per =new Person[3] ; //对象数组
per[0] = new Person(“张三”,20) ;
per[1] = new Person(“李四”,20) ;
per[2] = new Person(“王五”,20) ;
for (int x = 0 ;x < per.length ; x ++) {
System.out.println(per[x].getInfo()) ;
}
}
}
图三 执行结果三
范例:对象数组的静态初始化
class Person {
private String name ;
private int age ;
public Person(String name ,int age) {
this.name = name ;
this.age = age ;
}
public String getInfo() {
return “姓名:” + this.name + “、年龄:” + this.age ;
}
//setter、getter略
}
public class ArrayDemo {
public static void main (String args[ ]) {
Person per =new Person[] {
new Person(“张三”,20) ;
new Person(“李四”,20) ;
new Person(“王五”,20) ;
} ; //对象数组
for (int x = 0 ;x < per.length ; x ++) {
System.out.println(per[x].getInfo()) ;
}
}
}
图四 执行结果四
对于对象数组而言,本身只是更换了一种所谓数组定义的类型。但是这种情况下,内存图就比较麻烦了。
观察对象数组内存图:
图五 对象数组内存图
所有的开发都不可能离开对象数组,但是通过一系列的分析也应该知道一个数组中的最大缺陷:长度是固定的。优势:数据线性保存,根据索引访问,速度较快(时间复杂度为“1”)。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学