JAVA数组

一 . 数组

数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致.
创建数组:

  • 数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度]
  • 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…}
  • 数据类型[] 数组名 = {元素1,元素2,元素3…}

数组有定长特性,长度一旦指定,不可更改

数组的长度:
每个数组都具有长度,而且是固定的.Java中赋予了数组的一个属性,可以获取到数组的长度,语句为:数组名.length.属性length的执行结果是数组的长度,结果为int类型.

访问数组:
每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素.数组的最大索引值为数组名.length-1.

  • 数组名[索引]=数值,为数组中的元素赋值
  • 变量=数组名[索引],获取出数组中的元素

二 . 数组原理内存图

Java虚拟机(JVM)的内存划分
区域名称作用
寄存器给CPU使用,与开发无关
本地方法栈JVM在使用操作系统功能的时候使用,和开发无关
方法区存储可以运行的class文件
堆内存存储对象或者数组,new来创建的,都存储在堆内存
方法栈方法运行时使用的内存
数组在内存中的存储

一个数组

public static void main(String[] args) {
  	int[] arr = new int[3];
  	System.out.println(arr);//[I@5f150435
}

执行此方法执行,发现输出的结果是[I@5f150435,这个是数组在内存中的地址,在文章上面我们提到new出来的内容,都是在堆内存中存储的,而方法中的变量arr保存的就是数组的地址.

在这里插入图片描述
要获取数组中的元素,需要借助数组的索引,比如输出arr[0],就会输出arr保存的内存地址中数组中0索引上的元素

两个数组
两个不同的数组会指向不同的地址

public static void main(String[] args) {
    int[] arr = new int[3];
    int[] arr2 = new int[2];
    System.out.println(arr);
    System.out.println(arr2);
}

在这里插入图片描述
两个变量指向一个数组

public static void main(String[] args) {
    // 定义数组,存储3个元素
    int[] arr = new int[3];
    //数组索引进行赋值
    arr[0] = 5;
    arr[1] = 6;
    arr[2] = 7;
    //输出3个索引上的元素值
    System.out.println(arr[0]);
    System.out.println(arr[1]);
    System.out.println(arr[2]);
    //定义数组变量arr2,将arr的地址赋值给arr2
    int[] arr2 = arr;
    arr2[1] = 9;
    System.out.println(arr[1]);
}

在这里插入图片描述

三 . 遍历数组

将数组中的每个元素分别获取出来,就是遍历

public static void main(String[] args) {
    int[] arr = { 1, 2, 3, 4, 5 };
    for (int i = 0; i < arr.length; i++) {
      System.out.println(arr[i]);
    }
}

四 . 数组反装

数组中的元素颠倒顺序,以原始数组为1,2,3,4,5,反转后的数组为5,4,3,2,1举例.

public static void main(String[] args) {
    int[] arr = { 1, 2, 3, 4, 5 };
    /*
      循环中定义变量min=0最小索引
      max=arr.length-1最大索引
      min++,max--
      */
    for (int min = 0, max = arr.length - 1; min <= max; min++, max--) {
      //利用第三方变量完成数组中的元素交换
      int temp = arr[min];
      arr[min] = arr[max];
      arr[max] = temp;
    }
    // 反转后,遍历数组
    for (int i = 0; i < arr.length; i++) {
      System.out.println(arr[i]);
    }
}

在这里插入图片描述

五 . 数组异常(常见)

越界异常

public static void main(String[] args) {
    int[] arr = {1,2,3};
    System.out.println(arr[3]);
}

创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常.
在这里插入图片描述

空指针异常

public static void main(String[] args) {
    int[] arr = {1,2,3};
    arr = null;
    System.out.println(arr[0]);
}

arr = null,即变量arr不会在保存数组的内存地址,也不允许再操作数组,因此运行的时候会抛出NullPointerException 空指针异常.

在这里插入图片描述

怎么把数组中指定的数据拷贝到另一个数组中

java.lang.System 类中提供了相关的静态方法
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :将数组中指定的数据拷贝到另一个数组中
参数含义:

参数序号参数名称参数类型参数含义
1srcObject源数组
2srcPosint源数组索引起始位置
3destObject目标数组
4destPosint目标数组索引起始位置
5lengthint复制元素个数
public class SystemDemo {
    public static void main(String[] args) {
        long l = System.currentTimeMillis();//1583716922952
        System.out.println(l);
        int[] arr = {1, 2, 3, 4};
        int[] arr2 = {7, 8, 9, 12, 23};
        System.arraycopy(arr,1,arr2,0,2);
        /*
        代码运行后:
        两个数组中的元素发生了变化 
        arr数组元素[1,2,3,4] 
        arr2数组元素[2, 3, 9, 12, 23] */
        for (int i =0;i<=arr2.length-1;i++) {
            System.out.println(arr2[i]);
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值