一、动态初始化数组
- 定义数组的时候 只确定元素的类型和数组的长度,之后再存入具体数据。
二、动态初始化数组的基本原理
- 当你赋值后,数组的默认值0,就会变成你赋的值
三、数组的动态初始化格式
格式:
数据类型[] 数组名 = new 数据类型[长度];
// 例子
// 1.定义一个动态初始化数组,长度:3
int[] arr = new int[3];
// 2.后存入具体数据:10,20,30 ——> 赋值
arr[0] = 10; // 存入第一位
arr[1] = 20; // 存入第二位
arr[2] = 30; // 存入第三位
// 3.输出一、二、三位数据 ——> 取值
System.out.println(arr[0]); // 10
System.out.println(arr[1]); // 20
System.out.println(arr[2]); // 30
四、练一练
package com.app.create;
public class ArrayDemo5 {
public static void main(String[] args) {
// 目标:学会动态初始化数组的定义和使用
// 需求1:班级即将要期末考试了,需要你写一个程序来录入班级学生的考试成绩,班级人数3个
/*
分析需求:
1.定义一个double类型的动态初始化数组,长度为3,用于存放学生考试成绩
实现:
1.定义一个double类型的动态初始化数组,长度为3,用于存放学生考试成绩
2.用于测试:期末考试结束了,开始录入学生成绩
3.用于测试:老师要查看所有学生的成绩,发现第3个学生缺考了
*/
System.out.println("--------------学生成绩录入----------------");
// 1.定义一个double类型的动态初始化数组,长度为3,用于存放学生考试成绩
double[] scores = new double[3]; // 默认值:[0.0, 0.0, 0.0]
// 索引: 0 1 2
// 2.用于测试:期末考试结束了,开始录入学生成绩 ——> 赋值
scores[0] = 90.0; // 第一个学生的考试成绩:90分
scores[1] = 78.5; // 第二个学生:78.5分
// scores[2] = 89.0; // 第三个学生:89分
// 3.用于测试:老师要查看所有学生的成绩, ——> 取值
System.out.println("第1个学生的成绩:" + scores[0]);
System.out.println("第2个学生的成绩:" + scores[1]);
// 发现第3个学生缺考了
System.out.println("第3个学生的成绩:" + scores[2]);
System.out.println("\n--------------学生姓名录入----------------");
// 需求2:开学啦!新生陆续报名入读我们学校,现在需要写一个能录入1000个学生姓名的程序
/*
分析需求:
1.定义一个String类型的动态初始化数组,长度为1000,用于存放学生姓名
实现:
1.定义一个String类型的动态初始化数组,长度为1000,用于存放学生姓名
2.用于测试:有3个新生报名了,录入新生的姓名
3.用于测试:校长要检查是谁报名入读了
*/
// 1.定义一个String类型的动态初始化数组,长度为1000,用于存放学生姓名
String[] names = new String[1000]; // 默认值:[0, 0, 0, 0, ...]
// 索引: 0 1 2 3 ...
// 2.用于测试:有3个新生报名了,录入新生的姓名
names[0] = "张杰";
names[2] = "林俊杰";
names[4] = "杨洋";
// 3.用于测试:校长要检查是谁报名入读了
System.out.println("第1个学生的姓名:" + names[0]);
System.out.println("第2个学生的姓名:" + names[1]);
System.out.println("第3个学生的姓名:" + names[2]);
System.out.println("第4个学生的姓名:" + names[3]);
System.out.println("第5个学生的姓名:" + names[4]);
System.out.println("第6个学生的姓名:" + names[5]);
System.out.println("第7个学生的姓名:" + names[6]);
System.out.println("........");
}
}
输出结果:
--------------学生成绩录入----------------
第1个学生的成绩:90.0
第2个学生的成绩:78.5
第3个学生的成绩:0.0
--------------学生姓名录入----------------
第1个学生的姓名:张杰
第2个学生的姓名:null
第3个学生的姓名:林俊杰
第4个学生的姓名:null
第5个学生的姓名:杨洋
第6个学生的姓名:null
第7个学生的姓名:null
........
1、结论
- 动态初始化数组的特点:先定义,后赋值,不赋值的位置会产生默认值:比如double类型(默认值:0.0)、String类型(默认值:null)
2、动态初始化数组总结
(1)数组的动态初始化的写法是怎么样子的?
-
格式: 数据类型[] 数组名 = new 数据类型[长度]; 例: int[] arr = new int[10];
(2)两种数组定义时的特点和业务场景有什么区别?
- 当已经知道要存入的元素值,用静态初始化数组
- 当存入的元素值是未知的,用动态初始化数组
五、动态初始化数组的元素默认值
1、元素默认值规则:
数据类型 | 明细 | 默认值 |
---|---|---|
基本类型 | byte、short、char、int、long float、double boolean | 0 0.0 false |
引用类型 | 类、接口、数组、String | null |
2、两种初始化数组的使用场景总结、注意事项说明:
-
动态初始化:只指定数组的长度,后期赋值,适合开始知道数据的数量,但是不确定具体元素值的业务场景
-
静态初始化:前期就存入元素值,适合开始就能确定具体元素值的业务场景
-
两种初始化的格式是独立分开的,严格要求不能混合使用
int[] arrs = new int[3]{1, 10, 20}; // 错误!!!!
3、练一练
package com.app.create;
public class ArrayDemo6 {
public static void main(String[] args) {
// 目标:掌握动态初始化元素默认值的规则
// 1.整数类型数组的元素默认值都是0
System.out.println("----------整数类型数组的元素默认值----------");
// int类型
System.out.println(">>>>>>>>int类型<<<<<<<<<");
int[] ints = new int[1000];
System.out.println(ints[0]); // 首位
System.out.println(ints[999]); // 末位
// short类型
System.out.println("\n>>>>>>>>short类型<<<<<<<<<");
short[] shorts = new short[100];
System.out.println(shorts[0]);
System.out.println(shorts[99]);
// byte类型
System.out.println("\n>>>>>>>>byte类型<<<<<<<<<");
byte[] bytes = new byte[10];
System.out.println(bytes[0]);
System.out.println(bytes[9]);
// long类型
System.out.println("\n>>>>>>>>long类型<<<<<<<<<");
long[] longs = new long[100000000];
System.out.println(longs[0]);
System.out.println(longs[99999999]);
// char类型
System.out.println("\n>>>>>>>>char类型<<<<<<<<<");
char[] chars = new char[100];
System.out.println((int)chars[0]);
System.out.println(chars[99]);
// 2.浮点类型数组的元素默认值都是0.0
System.out.println("\n----------浮点类型数组的元素默认值----------");
// float类型
System.out.println(">>>>>>>>float类型<<<<<<<<<");
float[] floats = new float[90];
System.out.println(floats[0]);
System.out.println(floats[89]);
// double类型
System.out.println("\n>>>>>>>>double类型<<<<<<<<<");
double[] doubles = new double[90];
System.out.println(doubles[0]);
System.out.println(doubles[89]);
// 3.布尔类型数组的元素默认值都是false
System.out.println("\n----------布尔类型数组的元素默认值----------");
// boolean类型
System.out.println(">>>>>>>>boolean类型<<<<<<<<<");
boolean[] booleans = new boolean[100];
System.out.println(booleans[0]);
System.out.println(booleans[99]);
// 4.引用类型数组的元素默认值都是null
System.out.println("\n----------引用类型数组的元素默认值----------");
// String类型
System.out.println(">>>>>>>>String类型<<<<<<<<<");
String[] strings = new String[100];
System.out.println(strings[0]);
System.out.println(strings[99]);
}
}
输出结果:
----------整数类型数组的元素默认值----------
>>>>>>>>int类型<<<<<<<<<
0
0
>>>>>>>>short类型<<<<<<<<<
0
0
>>>>>>>>byte类型<<<<<<<<<
0
0
>>>>>>>>long类型<<<<<<<<<
0
0
>>>>>>>>char类型<<<<<<<<<
0
----------浮点类型数组的元素默认值----------
>>>>>>>>float类型<<<<<<<<<
0.0
0.0
>>>>>>>>double类型<<<<<<<<<
0.0
0.0
----------布尔类型数组的元素默认值----------
>>>>>>>>boolean类型<<<<<<<<<
false
false
----------引用类型数组的元素默认值----------
>>>>>>>>String类型<<<<<<<<<
null
null
-
单独说明一下 char 类型
// char类型 System.out.println("\n>>>>>>>>char类型<<<<<<<<<"); char[] chars = new char[100]; System.out.println((int)chars[0]); System.out.println(chars[99]);
输出结果:
0
第二个输出结果会是这个字符,是因为没有强转为int类型,所以会输出这个字符,不过这个字符在ASCII码表中对应的数字是:0,所以第二输出结果也是0
动态初始化数组的元素默认值规则总结
1、动态初始化数组后元素的默认值是什么样的?
- byte、short、int、char、long类型数组元素的默认值都是 0
- float、double类型数组元素的默认值都是 0.0
- boolean类型数组元素的默认值都是 false
- String类型数组元素的默认值都是 null