哇哦----是java数组ye

  前言

Hello,大家好!很开心与你们在这里相遇,我是一个喜欢文字、喜欢有趣的灵魂、喜欢探索一切有趣事物的女孩,想与你们共同学习、探索关于IT的相关知识,希望我们可以一路陪伴~

1. 一维数组

1.1 概念

多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

定义:相同数据类型的固定长度的容器。

总结:存放数据,长度和类型是固定的;

四部曲:声明数组、分配空间、赋值、处理数据

1.2 数组定义格式

  • 格式一

 数据类型[] 数组名;

      示例:

int[] arr;        
double[] arr;      
char[] arr;
  • 格式二

数据类型 数组名[];

      示例:

int arr[];
double arr[];
char arr[];

 1.3 数组初始化

1.3.1 数组静态初始化

  • 什么是静态初始化

在创建数组时,直接将元素确定,由系统计算出数组的长度。

  • 静态初始化格式

完整版格式:

数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};

简化版格式:

数据类型[] 数组名 = {元素1,元素2,...};

代码示例:

  public class ArrayDemo {
      public static void main(String[] args) {
          //定义数组
          int[] arr = {1, 2, 3};
  
          //输出数组名
          System.out.println(arr);
  
          //输出数组中的元素
          System.out.println(arr[0]);//1
          System.out.println(arr[1]);//2
          System.out.println(arr[2]);//3
      }
  }

1.3.2 数组动态初始化

  • 什么是动态初始化

数组动态初始化就是只给定数组的长度,由系统给出默认初始化值。

  • 动态初始化格式

数据类型[] 数组名 = new 数据类型[数组长度];

int[] arr = new int[3];

System.out.println(arr);//[I@1540e19d
//访问数组元素格式
System.out.println(arr[0]);//0
System.out.println(arr[1]);//0
System.out.println(arr[2]);//0
  • 动态初始化格式详解

等号左边:

  • int:数组的数据类型

  • []:代表这是一个数组

  • arr:代表数组的名称

等号右边:

  • new:为数组开辟内存空间

  • int:数组的数据类型

  • []:代表这是一个数组

  • 3:代表数组的长度

1.4 访问数组元素

  • 什么是下标

每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。
这个自动编号称为数组下标(索引)(index),可以通过数组的索引访问到数组中的元素。      

  • 语法格式

数组名[索引];

  • 代码示例
public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];
        //输出数组名
        System.out.println(arr); //[I@880ec60
        //输出数组中的元素
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        //数组的赋值;单个赋值或者使用循环赋值
        
        //使用循环读取数组元素
    }
}

 1.5 内存分配

1.5.1 内存概述

内存是计算机中的重要原件,临时存储区域,作用是运行程序。
我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。
必须放进内存中才能运行,运行完毕后会清空内存。 
Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。 

1.5.2 java中的内存分配

区域名称作用
寄存器给CPU使用,和我们开发无关。
本地方法栈JVM在使用操作系统功能的时候使用,和我们开发无关。
方法区存储可以运行的class文件。
堆内存存储对象或者数组,new来创建的,都存储在堆内存。
方法栈方法运行时使用的内存,比如main方法运行,进入方法栈中执行。

1.6 数组内存图

  • 单个数组的内存图

  • 多个数组的内存图

  • 多个数组指向相同内存图  

1.7 注意事项

1.7.1 索引越界异常

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];
        System.out.println(arr[3]);
    }
}
  • 出现原因

数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。

程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

  • 解决方案

将错误的索引修改为正确的索引范围即可!

1.7.2 空指针异常

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];

        //把null赋值给数组
        arr = null;
        System.out.println(arr[0]);
    }
}
  • 出现原因

 arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

  • 解决方案

给数组一个真正的堆内存空间引用即可!

 1.8 数组案例

  • 数组遍历
public class ArrayTest01 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {11, 22, 33, 44, 55};

        //使用通用的遍历格式
        for(int x=0; x<arr.length; x++) {
            System.out.println(arr[x]);
        }
    }
}
        //for(数据类型 变量 : 数组或集合){}
        //变量是数组里面的元素,相当于从数组中进行一个,逐个取值的操作; 
        for (int num :scores ) {
            System.out.println(num);
        }
  •  数组元素反转

数组中的元素颠倒顺序,例如原始数组为1,2,3,4,5,反转后的数组为5,4,3,2,1,影响原始数据;

  • 代码实现
public static void main(String[] args) {
    int[] arr = {1,2,3,4,5};

		for(int x=0;x<arr.length/2;x++){
			int temp = arr[x];
			arr[x] = arr[arr.length - 1 - x];
			arr[arr.length - 1 - x] = temp;
		}

    // 反转后,遍历数组
    System.out.print("[");
    for(int x=0;x<arr.length;x++){
        if(x == arr.length-1){
            System.out.println(arr[x]);
        }else{
            System.out.print(arr[x]+",");
        }
    }
    System.out.println("]");

}

2. 二维数组

  • 什么是二维数组

 二维数组其实就是这个二维数组中有多少个一维数组,是一维数组的 一维数组。

2.1 二维数组格式 

   (1)格式一:

数据类型[][] 变量名 = new 数据类型[m][n];

     格式解释:

m表示这个二维数组有多少个一维数组

n表示每一个一维数组的元素个数

      代码示例: 

        //格式一  静态初始值
        int[][] arr = new int[3][2];

        //这个二维数组中有 3个一维数组, 每一个一维数组有2个长度
        //拿到第一个一维数组
        System.out.println(arr[0][0]);
        System.out.println(arr[0][1]);
        System.out.println("=========第一个一维数组=========");

        arr[0][0] = 10;
        System.out.println(arr[0][0]);
        System.out.println(arr[0][1]);
        System.out.println("=================");

        //拿到第二个一维数组
        System.out.println(arr[1][0]);
        System.out.println(arr[1][1]);

        //拿到第三个一维数组
        System.out.println(arr[2][0]);
        System.out.println(arr[2][1]);

  (2)格式二:

数据类型[][] 变量名 = new 数据类型[m][];

      格式解释:

m表示这个二维数组有多少个一维数组

这一次没有直接给出一维数组的元素个数,可以动态的给出

      代码示例:

//二维数组中有3个一维数组,但这一次并没有给出第一个一维数组的长度
int[][] arr = new int[3][];

// 第一个数组的元素个数为2
arr[0] = new int[2];

// 第二个数组的元素个数为3
arr[1] = new int[3]
    
// 第三个数组的元素个数为1
arr[2] = new int[1];

   (3)格式三:

标准版:
    数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化版:
    数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};

      示例:

 int[][] arr =  {{1,2,3},{4,5},{6}};

2.2 二维数组遍历

public class ArrayCase {
    public static void main(String[] args) {       
        // 定义二维数组
        int[][] arr = {{22, 66, 44}, {77, 33, 88}, {25, 45, 65}};
        //遍历第一个一维数组
        for(int x =0; x<arr[0].length; x++){
            System.out.println(arr[0][x]);
        }
        System.out.println("=====================");

        //遍历第二个一维数组
        for(int x =0; x<arr[1].length; x++){
            System.out.println(arr[1][x]);
        }
        System.out.println("=====================");
        //遍历第三个一维数组
        for(int x =0; x<arr[2].length; x++){
            System.out.println(arr[2][x]);
        }
        System.out.println("=====================");
        //用户循环改进y
        for (int y = 0; y <arr.length ; y++) {
            for(int x =0; x<arr[y].length; x++){
                System.out.println(arr[y][x]);
            }
            System.out.println();
        }
    }
}

择人先问心,爱人先爱己~  希望你今天也开心~

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆不呆~

你的鼓励是我最开心的事情~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值