一 为什么需要数组?
为了存储多个数据值
二 什么是数组?
数组是用来存储同一种数据类型多个元素的容器。 数据类型:可以是基本类型,也可以是引用类型 容
器:比如教
室、衣柜、纸箱等,可以存放多个事物
三 数组的定义和访问
3.1
数组的定义格式一:
数据类型
[ ]
数组名
= new
数据类型
[
长度
];
定义格式详解:
1.
数据类型:即数组中存储元素的数据类型,可以是基本数据类
型,也可以是引用数据类型
2. [ ]
:表示数组
3.
数组名:数组的变量名,遵循标识符命名规范
4. new
:创建数组的关键字,通过
new
开辟内存空间
5.
长度:即数组长度,数组最多能够存放元素的个数。数组长度
在定义时指定,不可更改
3.2
数组的定义格式二:
数据类型
[ ]
数组名
= new
数据类型
[]{
元素
1,
元素
2,
元素
3…};
格式二的好处:
定义时元素是确定的,避免内存空间的浪费
//
定义一个长度为
6
的整形数组
int
[]
nums
=
new
int
[
6
];
double
[]
doubleNums
=
new
double
[]{.
1
, .
2
,
0.3
};
3.3
数组的定义格式三:
数据类型
[ ]
数组名
= {
元素
1,
元素
2,
元素
3…};
格式三是格式二的变形,简化了代码编写
3.4
数组的初始化
在内存中为数组开辟连续空间并为每个元素赋值的过程
内存
:计算机的重要组件,用于程序运行中临时存储数据。
连续空间
:数组元素在内存空间中的存放位置是连续的
3.4.1
动态初始化:
只指定长度,由系统给出默认值
整数型:
0
浮点型:
0.0
字符型:
'\u0000'
(空字符)
布尔型:
false
引用类型:
null
3.4.2
静态初始化:
给出初始化值,由系统决定数组长度
3.5
数组的访问
通过数组的索引访问数组的元素
索引:也叫下标、脚标,是数组元素距离数组起始位置的偏移量
第一个元素的偏移量为
0
,所以数组的索引从
0
开始
格式:数组名
[
索引
]
取值:数组名
[
索引
]
赋值:数组名
[
索引
] =
值
;
3.6
数组的遍历
double
[]
doubleNums
=
{.
1
, .
2
,
0.3
};
int
[]
intArr
=
new
int
[
6
];
double
[]
doubleArr
=
new
double
[]{
0.1
,
10.1
,
100.1
};
int
[]
intArr2
=
{
1
,
2
,
3
};
需求:
给定一个
int
型数组,输出数组中的每一个元素
分析:
A
:使用格式一定义一个长度为
5
的
int
型数组
B
:为数组的前三个元素分别赋值为
1
,
2
,
3
C
:使用循环遍历数组
数组的长度:数组名
.length
package com.bigdata;
public class ArrayDemo {
public static void main(String[] args) {
int[] intArr = new int[6];
double[] doubleArr = new double[]{0.1, 10.1, 100.1};
int[] intArr2 = {1, 2, 3};
int val0 = intArr2[0];
System.out.println("val0 = " + val0);
int val2 = intArr2[2];
System.out.println("val2 = " + val2);
intArr2[2] = 6; val2 = intArr2[2];
System.out.println("val2 = " + val2);
int intArr2Len = intArr2.length;
System.out.println("intArr2Len = " + intArr2Len);
for (int i = 0; i < intArr2.length; i++) {
int item = intArr2[i];
System.out.println("item = " + item); }
for (int i = 0; i < intArr.length; i++) {
int intArrItem = intArr[i];
System.out.println("intArrItem = " + intArrItem);
}
System.out.println("intArr2 = " + intArr2);
// int val4 = intArr2[3];
// System.out.println("val4 = " + val4);
intArr2 = null;
int intArr2Val0 = intArr2[0];
}
结论:
1
:数组的最大索引为数组长度
-1
2
:数组中未手动赋值的元素,有默认值
3
:直接输出数组变量名,得到的是数组的内存地址值
package
com
.
bigdata
;
public class
ArrayDemo
{
public static
void
main
(
String
[]
args
) {
int
[]
intArr
=
new
int
[
6
];
double
[]
doubleArr
=
new
double
[]{
0.1
,
10.1
,
100.1
};
int
[]
intArr2
=
{
1
,
2
,
3
};
int
val0
=
intArr2
[
0
];
System
.
out
.
println
(
"val0 = "
+
val0
);
int
val2
=
intArr2
[
2
];
System
.
out
.
println
(
"val2 = "
+
val2
);
intArr2
[
2
]
=
6
;
val2
=
intArr2
[
2
];
System
.
out
.
println
(
"val2 = "
+
val2
);
int
intArr2Len
=
intArr2
.
length
;
System
.
out
.
println
(
"intArr2Len = "
+
intArr2Len
);
for
(
int
i
=
0
;
i
<
intArr2
.
length
;
i
++
) {
int
item
=
intArr2
[
i
];
System
.
out
.
println
(
"item = "
+
item
);
}
for
(
int
i
=
0
;
i
<
intArr
.
length
;
i
++
) {
int
intArrItem
=
intArr
[
i
];
System
.
out
.
println
(
"intArrItem = "
+
intArrItem
);
}
System
.
out
.
println
(
"intArr2 = "
+
intArr2
);
// int val4 = intArr2[3];
// System.out.println("val4 = " + val4);
intArr2
=
null
;
int
intArr2Val0
=
intArr2
[
0
];
}
四
. Java
程序的内存分配
方法区:
存储可运行的
class
文件,包含方法,静态成员,常量等(面向对象部分详解)
栈:
方法运行时使用的内存,特点是
“
后进先出
”
,即最先进入栈区的方法最后出栈,比如
main
方法
堆:
存储
new
出来的数组或对象(面向对象部分详解)
本地方法栈:
JVM
在调用操作系统功能时使用,与开发无关
寄存器:
CPU
使用,与开发无关
数组类型:
变量
arr
存储的是数组在堆内存中的地址值,而不是数组元素的值,变量
arr
通过内存地址
引用堆内存中的数组,所以数组是引用类型。
五
.
数组的常见操作
数组使用中两个常见问题
数组索引越界异常:
ArrayIndexOutOfBoundsException
当访问了不存在的索引时
异常
:即非正常情况,可以简单理解为程序运行过程中出现错误。
空指针异常:
NullPointerException
数组引用存储的值为
null
而非数组的地址值时