1 数组
1.1 生活中都是数组
超市
物品是分门别类
同样的物品会存放于同一个货架之上
图书馆
<<世界因你而不同>> 10本
存在于图书馆中
1. 在同一个书架上
2. 是连续存储的
3. 每一本书都是有独立的编号,整个编号是有规律可循
A-100-5-2-01 ~ 10
1.2 开发中的数据存储问题
在开发中可能会存在很多情况下,相同数据类型都是数据大量使用的情况,按照目前我们所学的方式,在代码中可能就会出现很多行的变量定义,会导致以下问题:
1. 代码过于臃肿!!!
2. 代码阅读性极差!!!
3. 数据维护性极差!!!
4. 数据没有任何的复用度可言,操作非常繁琐!!!
可以参考图书馆存放图书的方式来使用数组完成操作
1. 同样的数据类型
2. 数据的存储是连续的,同一个空间的
3. 每一个数据都有一个独立编号,但是有统一的名字
1.3 Java中如何定义数组【重点】
数据类型[] 数组名 = new 数据类型[容量];
/
赋值左侧
数据类型:
告知编译器,当前数组中能够保存的数据类型到底是什么?并且在确定数据类
型之后,整个数组中保存的数据类型无法修改!!!
[]:
1. 告知编译器这里定义的是一个数组类型数据。
2. 明确告知编译器,数组名是一个【引用数据类型】
数组名:
1. 操作数据非常重要的数据!!!
2. 数组名是一个【引用数据类型】
小拓展: int() (void , void )
赋值号右侧:
new:
申请【XX】内存空间,并且清空整个内存空间中所有二进制位,所有的二进制位都是0
数据类型:
前后呼应,告知编译器这里支持存储的数据类型到底是什么?
[容量]:
容量==> Capacity
告知编译器,当前数组中能够存放的对应数据类型的数据,最大存储多少个!!
【注意】
一旦确定容量,针对于当前数组,后期容量无法修改
/
1.4 数组的下标【重点】
规定
数组中的下标是从0开始,到数组的容量 - 1
例如:
数组容量为10
有效下标范围: 0 ~ 9
超出有效下标范围,都是无效下标,后期考虑数组处理异常问题,负数使用问题
操作会出现的问题:
1. 数组下标越界
ArrayIndexOutOfBoundsException
1.5 数组和循环不得不说的秘密
/
获取数组容量的方式
数组名.length 属性
当前数组的属性length是要占用一定的数组空间的,属于数组中的内容,这就是为什么数组中占用的空间要比存储数据计算空间略大一些。
/
1.7 数组地址转移问题
class Demo3 {
public static void main(String[] args) {
int[] arr1 = new int[10];
int[] arr2 = new int[10];
arr1[5] = 100;
arr2[5] = 500;
System.out.println(arr1[5]);
System.out.println(arr2[5]);
arr1 = arr2;
arr1[5] = 2000;
System.out.println(arr1[5]);
System.out.println(arr2[5]);
}
}
1.7 数组和方法之间的关系
/*
Java中如何数组成为方法的参数,已经使用方式
*/
public static void main(String[] args) {
}
/*
格式:
public static returnType methodName(arrayType[] arrayName)
arrayName是一个数组类型的变量,引用数据类型的变量
*/
class Demo4 {
public static void main(String[] args) {
int[] array = new int[10];
// 调用赋值数组中元素的方法
// 调用参数是一个数组类型的方法,需要传入的内容是数组名
assignIntArray(array);
printIntArray(array);
}
/*
需求:
赋值一个int类型的数组
方法分析:
public static 固定格式 不要问
返回值类型:
void 无返回值
方法名:
assignIntArray 见名知意,动宾结构,小驼峰命名法
形式参数列表:
这里需要的是一个int类型的数组
(int[] arr)
方法声明:
public static void assignIntArray(int[] arr)
*/
/**
* 赋值一个指定的int类型数组
*
* @param arr 这里需要的参数是一个int类型数组
*/
public static void assignIntArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
}
/*
需求
展示一个int类型数组中保存的数据
方法分析:
public static: 不要问
返回值类型:
void
方法名:
printIntArray
形式参数列表:
这里需要展示的是一个int类型数组
(int[] arr)
方法声明:
public static void printIntArray(int[] arr)
*/
/**
* 展示一个int类型数组中保存的数据
*
* @param arr 这里需要的是一个int类型数组
*/
public static void printIntArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println("array[" + i + "]=" + arr[i]);
}
}
}