一、静态初始化数组
- 定义数组的时候直接给数组赋值。
二、静态初始化数组的格式
// 1.完整格式
数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3, ...};
// 例子
double[] scores = new double[]{99.8, 78.5, 65.5, 89.0};
int[] ages = new int[]{18, 20, 21, 23};
// 2.简化格式
数据类型[] 数组名 = {元素1, 元素2, 元素3, ...};
// 例子
double[] scores2 = {99.8, 78.5, 65.5, 89.0};
int[] ages2 = {18, 20, 21, 23};
package com.app.create;
public class ArrayDemo1 {
public static void main(String[] args) {
// 目标:学会使用静态初始化的方式定义数组
// 完整格式:数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3, ...};
// 简化格式:数据类型[] 数组名 = {元素1, 元素2, 元素3, ...}; ————>常用(简便)
/*
需求:
将这些学生的分数:88.5,99,95.5
学生的年龄:21,22,19
学生的姓名:张飞, 关羽, 老六
分别定义一个数组存起来
*/
// 定义一个double类型的数组scores,用于存放班级学生的分数
// double[] scores = new double[]{88.5, 99.0, 95.5}; // 完整格式
double[] scores = {88.5, 99.0, 95.5}; // 简化格式
// 定义一个int类型的数组ages,用于存放班级学生的年龄
// int[] ages = new int[]{21, 22, 19}; // 完整格式
int[] ages = {21, 22, 19}; // 简化格式
// 定义一个String类型的数组names,用于存放班级学生的姓名
// String[] names = new String[]{"张飞", "关羽", "老六"}; // 完整格式
String[] names = {"张飞", "关羽", "老六"}; // 简化格式
}
}
三、数组的基本原理
- java是如何将 int[] ages = {21, 22, 19}; 这个数组存入内存的???
-
接下来咱们就来理解一下这一串地址到底是啥意思?
package com.app.create; public class ArrayDemo1 { public static void main(String[] args) { // 定义一个int类型的数组ages,用于存放班级学生的年龄 // int[] ages = new int[]{21, 22, 19}; // 完整格式 int[] ages = {21, 22, 19}; // 简化格式 // 输出ages到控制台 System.out.println(ages); } }
输出结果: [I@119d7047
注意:数组变量中存储的是数组在内存中的地址,数组是引用类型。
- 什么是引用类型:
- 数组ages,存放的是一个地址:[I@119d7047
- 数组ages是根据这个地址,去引用这个对象,也就是根据这个地址去找这个对象,所以就叫引用类型
静态初始化数组总结
1、数组的静态初始化的写法与特点是什么?
-
写法
// 完整格式 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3, ...}; // 例子 double[] scores = new double[]{100.0, 89.5, 65.7}; // 简化格式 数据类型[] 数组名 = {元素1, 元素2, 元素3, ...}; // 例子 double[] scores = {100.0, 89.5, 65.7};
-
特点
- 定义数组时,就已经进行赋值了
2、数组是属于什么类型,数组变量名中存储的是什么?
- 数组属于引用数据类型,存储的是数组在内存中的地址信息
四、数组的访问
-
1、先回顾一下数组在内存中的基本原理
-
上图中将 length 误写成 lenght 了,请大家原谅我的眼拙!正确的是:length
五、数组的访问格式
-
访问格式
数据名称[索引]
-
取值
int[] ages = {21, 22, 19}; // 数组元素为:21 22 19,length(长度):3 // 取值:输出数组ages第3个位置的值 System.out.println(ages[2]); // 为啥是2呢?因为java是从0开始数,0 1 2,第三个位置的索引为:2
输出结果: 19
-
赋值
int[] ages = {21, 22, 19}; // 数组元素为:21 22 19,length(长度):3 // 赋值:将数组ages第2个位置的值 修改为:90,并输出 ages[1] = 90; System.out.println(ages[1]);
输出结果: 90
-
访问数组的长度
格式: 数据名.length
int[] ages = {21, 22, 19}; // 数组元素为:21 22 19,length(长度):3 // 输出数组ages的长度 System.out.println(ages.length);
输出结果: 3
-
练一练
package com.app.create;
public class ArrayDemo2 {
public static void main(String[] args) {
// 目标:学会访问数组的元素(数据)
// 访问格式:数组名称[索引]
// 定义一个数组,名称为ages,元素有:12, 22, 30, 50
int[] ages = {12, 22, 30, 50};
//索引: 0 1 2 3
// 1.取值:取出数组ages所有的元素
// 方式1:直接输出
System.out.println("------------取值方式1——直接输出------------");
System.out.println("第一个元素:" + ages[0]);
System.out.println("第二个元素:" + ages[1]);
System.out.println("第三个元素:" + ages[2]);
System.out.println("第四个元素:" + ages[3]);
// 方式2:取出先存放,再输出
System.out.println("\n-----------取值方式2——先存后输出-----------");
// 先将每个元素用变量存放起来
int one = ages[0]; // 第一个元素
int two = ages[1]; // 二
int three = ages[2]; // 三
int four = ages[3]; // 四
// 后将每个取出的元素输出
System.out.println("第一个元素:" + one);
System.out.println("第二个元素:" + two);
System.out.println("第三个元素:" + three);
System.out.println("第四个元素:" + four);
// 2.赋值
// 将99赋值给数组ages第3个位置
System.out.println("\n-----------将99赋值给数组ages第3个位置-----------");
ages[2] = 99;
System.out.println("赋值后的第三个元素:" + ages[2]);
// 3.访问数组长度
System.out.println("\n-----------访问数组长度-----------");
int agesLength = ages.length;
System.out.println("数组长度为:" + agesLength);
}
}
输出结果:
------------取值方式1——直接输出------------
第一个元素:12
第二个元素:22
第三个元素:30
第四个元素:50
-----------取值方式2——先存后输出-----------
第一个元素:12
第二个元素:22
第三个元素:30
第四个元素:50
-----------将99赋值给数组ages第3个位置-----------
赋值后的第三个元素:99
-----------访问数组长度-----------
数组长度为:4
问题:数组的最大索引可以怎么表示?
-
索引:必须大于等于 0
-
前提:数组的元素个数必须 大于0,才存在索引,然后才存在最大索引
-
分三种情况来解释
表示格式: 数组名.length-1 // 数组的长度 -1,就得出当前数组的最大索引
-
1、当数组中只有一个元素时
// 1、当数组中只有一个元素时 double[] scores = {56.9}; // 索引 0 // 0,因为 数组名.length-1 = 1-1 = 0 System.out.println(scores.length-1);
输出结果: 0
-
2、当数组中有一个以上的元素时
// 2、当数组中有一个以上的元素时 int[] ages = {14, 15, 17}; // 索引 0 1 2 // 2,因为 数组名.length-1 = 3-1 = 2 System.out.println(ages.length-1);
输出结果: 2
-
3、当数组中没有元素时,就不存在最大索引
// 3、当数组中没有元素时,就不存在最大索引 String[] names = {}; // 没有元素,不存在索引,更不存在最大索引 System.out.println(names.length-1);
输出结果: -1
-
访问数组总结
1、如何访问数组的元素?
-
取值
数组名[索引]
2、如何访问数组的长度?
-
数组名.length
2、数组的最大索引如何获取?
-
数组名.length-1 // 前提:数组里的元素个数大于0
六、数组的几个注意事项
-
1、“数据类型[] 数组名” 也可以写成 “数据类型 数组名[]”
-
// 1.“数据类型[] 数组名” 也可以写成 “数据类型 数组名[]” // 这两种写法都是数组,推荐使用第一种,常见;第二种要知道有这么回事 int[] ages = {1, 3, 4}; int ages2[] = {1, 3, 4};
-
-
2、属于什么类型的数组就存放属于什么类型的数据,否则报错
-
注意: ‘a’ 等一些字符,是对应ASCII码表中的十进制数,然后再以二进制进行存储的,所以 ‘a’ 放在数组中不会报错
-
3、数组一旦定义出来,程序执行过程中,长度、类型就固定了
-
// 3.数组一旦定义出来,程序执行过程中,长度、类型就固定了 int[] ages4 = {1, 3, 4}; // 测试长度是不是固定的: 数组中有3个元素,长度为3,访问第4个元素,看看控制台会不会报错 System.out.println(ages4[3]);
输出结果: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 at com.app.create.ArrayDemo4.main(ArrayDemo4.java:22)
-
上图错误说明:索引 3 超出长度 3 的范围
-
上图错误说明:这里需要的类型是 int,你提供的类型是 double
-
经测试得出结论:数组一旦定义出来,程序执行过程中,长度、类型就固定了
-