4.数组,可变参数列表

若非群玉山头见,会向瑶台月下逢。

李白《清平调·其一》

一、数组的声明(创建数组的引用)

数组变量有两种声明方式:
1.

变量类型 [] 数组名;//首选的方法

如: int [] a;//首选
2.

变量类型 数组名 [];//C风格

如:int a [];//C风格
注:
声明数组时无需也不允许向C语言一样指定数组大小,数组大小的指定是在创建数组阶段完成的。
如:int [10] a;//这种方式在Java中是不被允许的!

二、数组的创建(为数组分配存储空间)

创建数组

Java中“万物皆对象”,数组也不例外。上面“数组的声明”只是声明了一个指向数组的引用,和实例化类创建对象一样,该引用具体指向何处还需通过关键字new来实例化一个数组对象。语法如下:

new 数据类型[数组长度];//此处定义数组长度!!!

如:new int [10];//实例化了一个长度为10的int型数组

数组的声明和创建可以放在一起:

如:int [] a = new int [10];//首先声明了一个指向int数组的引用a,然后实例化了一个长度为10的int型数组,并将a指向该数组。

三、数组初始化(为数组元素赋值)

默认的初始化

数组是一个引用类型,数组元素相当于类的成员变量,结合本专栏中“基本数据类型注意事项”可知,数组元素在未赋值的情况下会根据数组类型赋一个默认值。

静态初始化

静态初始化是在创建数组的时候直接为数组赋值,这种方式不需要指定数组长度,系统会根据赋值的个数自动确定长度。如:
int [] a={0,1,2,3,4,5,6,7,8,9};//首先声明了一个指向int数组的引用a,然后实例化了一个已经赋完值的int型数组,长度由系统根据元素个数自动确定为10,再将a指向该数组。

动态初始化

除了上述两种初始化方式之外,还可以根据需要动态的改变数组元素。如:

int a = new int[10];
int b = {0,1,2,3,4,5,6,7,8,9};
a[0] = 1;
b[0] = 1;

四、数组长度

每个数组都有一个length属性(注意,这是一个属性不是方法!),通过该属性可以获取数组的长度,使用方法为:

数组名.length;

如:a.length;//会返回名为a的数组的长度

五、复制数组

在C语言中,通过将一个数组名直接赋值给另一个数组名的方法实现复制数组的方式是不被允许的,因为在C语言中数组名是数组首元素的地址,故而C语言中数组名代表了一个地址,将一个地址赋值给另一个地址显然是不可以的。
而在Java中,数组名是一个引用,这个引用指向了某一个地址,将一个数组名即一个引用赋值给另一个数组名是可以的。如下所示:

int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int b[];
b = a;
for (int x : b) {
     System.out.print(x + "  ");
}
System.out.println();
b[0] = 123;
for (int x : a) {
     System.out.print(x + " ");
}

代码运行结果:
运行结果

上述代码首先创建了一个名为a的数组并指向了一块存储区域(该存储区域存放了10个int型变量),然后将a的引用赋值给了b,此时a与b同时指向了上述存储区域。正如结果所展示的,修改b中的元素,a中的元素也会相应改变,因为a与b指向了同一块存储区域,这就相当于为同一块存放了10个int型变量的存储区域取了两个名字分别是a与b。

六、Java SE5新特性:可变参数列表

若方法的参数个数或类型未知,则称其为可变参数列表。

通过Object(SE5之前)

在SE5之前可通过Object数组实现可变参数列表的功能,因为Object是所有类的直接或间接父类。
如下所示:

    public static void main(String args[]) {
        test(new Object[]{1, 2.2, 'A'});//强制类型转换为Object数组
    }

    static void test(Object[] args) {//方法需定义为static,因为main是一个静态方法
        for (Object i : args) {
            System.out.print(i + "  ");
        }
    }

运行结果:
在这里插入图片描述

SE5新加入特性

SE5中加入了可变参数列表,可以不通过数组直接达到同样的效果,如:

    public static void main(String args[]) {
        test(new Object[]{1, 2.2, 'A'});
    }

    static void test(Object... args) {
        for (Object i : args) {
            System.out.print(i + "  ");
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值