一、数组(array)【重点】
-
基本数据类型: 四类八种
-
引用数据类型: 数组,类,接口
1.1 数组介绍
数组是什么?
数据组合,相当于是容器,存放多个数据的
为什么需要数组?
之前变量就是存储数据,只不过变量只能存储一个数据
例如: 存储全班人的成绩,存储每个人的多个手机号
所以数据数组,一次性存多个数据
数组有特性:
数组一旦创建,长度固定(容量,尺寸)
数组只能存储同一种类型
数组对象没有方法,只有一个属性length可以获得长度
1.2 数组的语法
数组的声明
数据类型
[]
数组名;int[] arr; 声明一个整型数组,数组名arr
double[] arr2;
String[] arr3;
数组的创建
数组名 = new 数据类型[长度];
指定长度创建数组,默认值是空的
数组名 = new 数据类型[]{数据1,数据2,...}
指定数据,但是不知道长度
数组的使用
数组取值
数组存值
演示
public static void main(String[] args) {
int[] arr; // 声明整型数组
arr = new int[3]; // 创建长度为3的数组
double[] arr2 = new double[3];
System.out.println("arr2 = " + arr2);
}
1.3 创建数组的内存图
方法执行进栈,执行完弹栈消失
凡是new出来的对象,都会在堆中
在堆中要开辟连续空间,根据数组长度划分
产生地址值
根据长度空间,给位置设置下标(索引),从0开始
数组中出现默认值
整型默认值是0
浮点型是0.0
boolean默认值是false
char默认值是 ' '
引用类型默认值都是 null
最后将地址值赋值给变量(引用)
1.4 数组使用
数组是存储多个数据,使用方式非常简单,只能
向数组存储数据
从数组中取出数据
取值
double[] arr2 = new double[3];
System.out.println("arr2 = " + arr2);
System.out.println(arr[0] );
System.out.println(arr[1] );
System.out.println(arr[2] );
double d1 = arr2[0];
double d2 = arr2[1];
double d3 = arr2[2];
System.out.println("d1 = " + d1);
System.out.println("d2 = " + d2);
System.out.println("d3 = " + d3);
// 声明创建字符串数组,长度4,取出所有数据,打印
String[] arr3 = new String[4];
String s1 = arr3[0];
System.out.println(s1 );
System.out.println(arr3[1] );
System.out.println(arr3[3] );
// 数组取值时,下标不要越界,否则报错ArrayIndexOutOfBoundsException
赋值
public static void main(String[] args) {
// 声明 创建
double[] arr = new double[3];
// 第一次取值)默认值)
System.out.println(arr[0] );//0.0
System.out.println(arr[1] );//0.0
System.out.println(arr[2] );//0.0
arr[0] = 1.1;
arr[1] = 2.2;
arr[2] = 3.3;
// 再次取值
System.out.println(arr[0] );//1.1
System.out.println(arr[1] );//2.2
System.out.println(arr[2] );//3.3
}
注意事项: 数组操作是下标不要越界,最大下标是长度-1,最小是0
1.5 取值赋值内存图
1.6 练习
需求: 创建3个数组
整数数组存储3个人的年龄
字符串数组存储3个人姓名
小数数组存储3个人成绩
分别创建,存值,取值
public class Demo3 {
public static void main(String[] args) {
int[] ageArr = new int[3];
ageArr[0] = 18;
ageArr[1] = 19;
ageArr[2] = 20;
String[] nameArr = new String[3];
nameArr[0] = "李白";
nameArr[1] = "钟馗";
nameArr[2] = "亚瑟";
double[] scoreArr = new double[3];
scoreArr[0] = 4.5;
scoreArr[1] = 3.5;
scoreArr[2] = 2.5;
System.out.println("姓名:"+nameArr[0]+",年龄:"+ageArr[0]+",操作:"+scoreArr[0]+"分" );
System.out.println("姓名:"+nameArr[1]+",年龄:"+ageArr[1]+",操作:"+scoreArr[1]+"分" );
System.out.println("姓名:"+nameArr[2]+",年龄:"+ageArr[2]+",操作:"+scoreArr[2]+"分" );
}
}
1.7 另一种创建数组的方式
public class Demo4 {
public static void main(String[] args) {
// 指定长度,不指定数据,数据后续再动态赋值
int[] arr = new int[3];
// 创建数组时,直接给定数据,不给长度
int[] arr2 = new int[]{11, 22, 33, 44, 55};
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
System.out.println(arr2[3]);
System.out.println(arr2[4]);
// 以上方式,简化成
String[] arr3 = {"A", "B", "C"};
double[] arr4 = {1.1, 2.2, 3.3};
System.out.println(arr3[0]);
System.out.println(arr4[0]);
}
}
后续也可以继续修改数组中的数据....
二、数组属性
数组有一个属性,length,可以数组的长度(容量)
double[] arr4 = {1.1, 2.2, 3.3, 3.3, 3.3, 3.3, 3.3, 3.3, 3.3};
int length = arr4.length;
System.out.println("arr4数组的长度:" + length );
三、遍历【重点】
遍历: 将数组中的元素挨个(一个一个)的取出
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6};
// 遍历 输出
for (int i = 0;i < arr.length;i++) {
System.out.println(arr[i]);
}
}
四、数组在方法中应用
4.1 数组当做方法的参数
public static void main(String[] args) {
int[] arr = {11,22,33,44};
printArr(arr);
}
public static void printArr(int[] arr){
String s = "[";
for (int i = 0; i < arr.length; i++) {
s += arr[i];
if (i != arr.length - 1) {
s += ",";
} else {
s += "]";
}
}
System.out.println(s );
}
4.2 数组当返回值
public static void main(String[] args) {
double[] arr = test();
System.out.println(arr[0] );
}
public static double[] test() {
double[] arr = {1.1,2.2,3.3};
return arr;
}
五、二维数组
二维数组,就是元素是一维数组的数组,即数组中有数组的的数组
public class Demo6 {
public static void main(String[] args) {
/**
* 二维数组
* 数据类型[][] 数组名 = new 数据类型[长度1][长度2];
* 长度1: 二维数组长度
* 长度2: 其中每个一维数组的长度
*/
int[][] arr = new int[3][4];
// 创建了整型二维数组,总长是2,即其中有个2个一维数组
// 其中每个一维数组长度是3
System.out.println(arr );// 二维数组地址值
System.out.println(arr[0] );// 其中第一个一维数组地址值
System.out.println(arr[0][0] );// 取出第一个一维数组的第一个值
System.out.println("--------" );
// 外层循环遍历二维数组
for (int i = 0; i < arr.length; i++) {
// 内层循环遍历一维数组
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println( );
}
System.out.println("-------------------" );
int[][] arr2 = {
{1,2,3},
{4,5,6,7},
{8,9,10,11,12}
};
for (int i = 0; i < arr2.length; i++) {
// 内层循环遍历一维数组
for (int j = 0; j < arr2[i].length; j++) {
System.out.print(arr2[i][j]+" ");
}
System.out.println( );
}
}
}
七、总结
重点是数组的基本使用
声明,创建(2种),取值,存值
遍历
内存图