领略Java艺术之万物皆“数组” | 带你学《Java面向对象编程》之二十一

上一篇:欲善其事,先利其器-数组类库 | 带你学《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})) ;
     }    
}

领略Java艺术之万物皆“数组”   | 带你学《Java面向对象编程》之二十一
图一 执行结果一

虽然以上的程序可以实现任意多个数字的参数内容传递,但是与实际的要求并不符合,实际要求的是可以传递多个参数,而不是一个数组。从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艺术之万物皆“数组”   | 带你学《Java面向对象编程》之二十一
图二 执行结果二

可变参数的最大作用在于,在以后进行一些程序类设计或者开发者调用的时候,利用此种形式就可以避免数组的传递操作了。可变参数的本质需要清楚的是:依然属于数组。

对象数组

在之前所接触到的都是基本数据类型定义的数组,但是在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()) ;
        }
    }    
}

领略Java艺术之万物皆“数组”   | 带你学《Java面向对象编程》之二十一
图三 执行结果三

范例:对象数组的静态初始化

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()) ;
        }
    }    
}

领略Java艺术之万物皆“数组”   | 带你学《Java面向对象编程》之二十一
图四 执行结果四

对于对象数组而言,本身只是更换了一种所谓数组定义的类型。但是这种情况下,内存图就比较麻烦了。
观察对象数组内存图:

领略Java艺术之万物皆“数组”   | 带你学《Java面向对象编程》之二十一
图五 对象数组内存图

所有的开发都不可能离开对象数组,但是通过一系列的分析也应该知道一个数组中的最大缺陷:长度是固定的。优势:数据线性保存,根据索引访问,速度较快(时间复杂度为“1”)。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:一起来看引用与现实的邂逅 | 带你学《Java面向对象编程》之二十二
更多Java面向对象编程文章查看此处

上一篇:【超越200层ResNet】颜水成团队 CVPR 新架构,提速300%


下一篇:NGINX前端代理TOMCAT取真实客户端IP