【25节JavaSE知识点·8】数组 可变长参数

数组

概念

数组是一块连续的存储空间,用于存储多个相同类型的数据。

特点

1.相同类型 2.长度固定

定义

数据类型[] 数组名 = new 数据类型[数组长度];
如:int[] a = new int[5]; //定义数组a用于存储5个连续的int数据

访问数组元素

使用下标:从 0 到 a.length - 1
例:长度为5的数组,下标范围是从0到4
语法:数组变量名[数组下标]

        //给第二个元素赋值
        a[1] = 9;
        //获取第二个元素的值,并打印输出
        System.out.println(a[1]);

【注:ArrayIndexOutOfBoundsException:数组下标越界】

数组的遍历

把数组元素依次遍历一遍

int[] a = new int[5];
for(int i = 0; i < a.length; i ++){
  System.out.println(a[i]);
}

数组元素默认值

数组定义后,没给数组元素赋值,缺省就有的值为数组元素的默认值。

默认值取决于数组元素类型
byte/short/int/long 默认值为0
float/double 0.0f/0.0
char ‘\u0000’(空字符)
boolean false
String以及其他引用类型 null

定义数组的其他语法

【注意:new用于分配/开辟内存空间】
1.先声明,后分配空间
数据类型[] 数组名;
数组名 = new 数据类型[长度];
2.声明的同时,分配空间
数据类型[] 数组名 = new 数据类型[长度];
3.声明并赋值
数据类型[] 数组名 = new 数据类型[]{1,2,3,4};
4.声明并赋值
数据类型[] 数组名 = {1,2,3,4}; //不可以换行
【注意】
int[] a;
a = {1,2,3};
是错误的!!!!必须注意!!!

数组的首地址

int[] a = {55, 23, 4, 11, 3};
System.out.println(a);
public static void printArray(int[] c){
  c[0] = 0;
  System.out.println(Arrays.toString(c));
}

输出:[I@f5f2bb7
[0, 23, 4, 11, 3]

[I@15db9742 是数组首地址

​ c中存储的也是首地址,当c[0] = 0时,c作为“遥控器”将会对堆内的数组值进行改变。

当new数组时,就会在堆中为该数组申请一块连续的存储空间,此处为5 * 4B的内存空间。然后将该存储空间的首地址赋值给栈中变量a,所以数组变量a中存储的是数组的首地址。

a[0] 首地址不进行地址偏移
a[1] 首地址往后偏移1个int类型存储单位4字节

堆内存(heap):保存每一个对象的属性内容,保存对象的真正数据。堆内存需要用关键字new才可以开辟,如果一个对象没有对应的堆内存指向,将无法使用。
栈内存(stack):保存的是一块堆内存的地址数值,可以把它想象成一个int型变量(每一个int型变量只能存放一个数值),所以每一块栈内存只能保存一块堆内存地址。
注意:只有new才能开辟内存空间!!!!每new一次都表示要开辟新的堆内存空间!!!!!

数组作为函数的参数

数组作为函数参数时,实参给形参赋的值是地址。

实参和形参指向同一块地址。

数组的扩容

扩容方式:

1>定义新的大数组

2>文件的复制

System.arraycopy(原数组,原数组起始,新数组,新数组起始,长度);

3>JDK提供

Arrays.copyOf(原数组,新长度); //返回带有原值的新数组

为什么要扩容? 数组长度有限

扩容思想:

  1. 创建新数组
  2. 将旧数组元素复制到新数组中
  3. 更新数组地址

可变长参数

概念:适用于个数不确定,类型确定的情况。

注意:只能有一个参数,因为多个参数会分不清

  • 可变参数在形参中可以接收多个数据。
  • 可变参数的格式:数据类型…参数名称

可变参数的作用

  • 传输参数非常灵活,方便。可以不传输参数,可以传输1个或多个参数,也可以传输一个数组
  • 可变参数在方法内部本质上就是一个数组。

可变参数的注意事项:

  • 一个形参列表中可变参数只能有一个
  • 可变参数必须放在形参列表的最后面
public class test1 {
    //可变长参数 实参可以是0-N个该类型的数据
    public static void main(String[] args) {
        print(1,2,3,4,5);
    }
    public static void print(int ...arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}
--------------------------------------------------------------------
1
2
3
4
5
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值