day-06

1.2. 数组概念
数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致。

1.3. 数组初始化
数组的两种常见初始化方式:

动态初始化(指定长度)
静态初始化(指定内容)
方式一:动态初始化

格式:
数组存储的数据类型[ ] 数组名字 = new 数组存储的数据类型[数组长度];
数组存储的数据类型 数组名字[ ] = new 数组存储的数据类型[数组长度];

数组定义格式详解:
数组存储的数据类型: 创建的数组容器可以存储什么数据类型。

[] : 表示数组。

数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。

new:关键字,创建数组使用的关键字。

数组存储的数据类型: 创建的数组容器可以存储什么数据类型。

[长度]:数组的长度,表示数组容器中可以存储多少个元素。

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

和水杯道理相同,买了一个2升的水杯,总容量就是2升,不能多也不能少。
举例:
定义可以存储3个整数的数组容器,代码如下:

int[] arr = new int[3];  
int   arr[] = new int[3];
// 可以拆分 
int[] arr;
arr = new int[3];
1
2
3
4
5
方式二: 静态初始化

格式:

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

举例: 定义存储1,2,3,4,5整数的数组容器。

int[] arr = new int[]{1,2,3,4,5}; 
// 可以拆分 
int[] arr;
arr = new int[]{1,2,3,4,5};
1
2
3
4
方式三 :静态初始化省略格式(不能拆分)

格式:

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

举例:

定义存储1,2,3,4,5整数的数组容器

int[] arr = {1,2,3,4,5};
1
@扩展方法: Arrays.fill快速初始化,填充一个数组

java中的数组初始值都为零,若快速填充一个其他值的数组,即将数组批量填充相同的值,可以用 Arrays.fill 方法,但只能填充一个一维数组,多维数组还得用循环。

举例:

import java.util.Arrays;

public class HelloWorld {
    public static void main(String[] args) {
        int[] arr = new int[5];
        Arrays.fill(arr, 1);
        System.out.println(Arrays.toString(arr));  // [1, 1, 1, 1, 1]
    }
}

1
2
3
4
5
6
7
8
9
10
虽然Arrays.fill方法不能填充二维数组,不过在下面这种情况下,还是可以用一下的:

  int[][] map=new int[4][5];
   int[] row={1,2,6,3,6,1,7};
   Arrays.fill(map,row);  
1
2
3
当row中的数值不固定,也不一定有规律时,可以用Arrays.fill()来填充二维数组,使其每一行都是{1,2,6,3,6,1,7}

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

格式:

数组名[索引]

数组的长度属性: 每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的长度,语句为:数组名.length ,属性length的执行结果是数组的长度,int类型结果。由次可以推断出,数组的最大索引值为数组名.length-1。

public static void main(String[] args) {
     int[] arr = new int[]{1,2,3,4,5}; 
     //打印数组的属性,输出结果是5
      System.out.println(arr.length);
}
1
2
3
4
5
索引访问数组中的元素:

数组名[索引] = 数值,为数组中的元素赋值
变量 = 数组名[索引],获取出数组中的元素
public static void main(String[] args) {
 //定义存储int类型数组,赋值元素1,2,3,4,5 
 int[] arr = {1,2,3,4,5};
  //为0索引元素赋值为6 
  arr[0] = 6; 
  //获取数组0索引上的元素 
  int i = arr[0]; 
  System.out.println(i); 
  //直接输出数组0索引元素 
  System.out.println(arr[0]); 
}
1
2
3
4
5
6
7
8
9
10
11
1.5. 二维数组操作
二维数组初始化

同一维数组一样,共有4总不同形式的定义方法:

int[][] array1 = new int[10][10];
int array2[][] = new int[10][10];
int array3[][] = { { 1, 1, 1 }, { 2, 2, 2 } };
int array4[][] = new int[][] { { 1, 1, 1 }, { 2, 2, 2 } };
1
2
3
4
不定长二维数组

int[][] array = new int[3][];
array[0] = new int[1];
array[1] = new int[2];
array[2] = new int[3];
1
2
3
4
获取二维数组的长度

int length1 = array.length;
int length2 = array[0].length;
// 获取二维数组的第一维长度(3)
System.out.println(length1);
// 获取二维数组的第一维的第一个数组长度(1)
System.out.println(length2);
1
2
3
4
5
6
2. 数组原理内存图
2.1. 内存概述
内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。 Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

2.2. Java虚拟机的内存划分
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

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

数组遍历: 就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。

public static void main(String[] args) {
     int[] arr = { 1, 2, 3, 4, 5 }; 
     System.out.println(arr[0]); 
     System.out.println(arr[1]); 
     System.out.println(arr[2]); 
     System.out.println(arr[3]); 
     System.out.println(arr[4]);
 } 
1
2
3
4
5
6
7
8
以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改造成循环的写法。数组的索引是 0 到 lenght-1 ,可以作为循环的条件出现。

for循环遍历方式

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
6
foreach遍历方式

public static void main(String[] args) { 
 int[] arr = { 1, 2, 3, 4, 5 }; 
 for (int i : arr) { 
 System.out.println(i); 
    }
}
1
2
3
4
5
6
4. 数组常见异常
4.1. 数组越界异常
观察一下代码,运行后会出现什么结果?

public static void main(String[] args) {
 int[] arr = {1,2,3}; 
 System.out.println(arr[3])
 } 
1
2
3
4
创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一 旦出现了,就必须要修改我们编写的代码。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

让火车在天上飞

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值