java基础-day06-数组
2021-06-25 本文已影响0人
触手不可及
数组【重点】
1. 数组
1.1 为什么要使用数组
是否存在可能性需要一口气处理100个int类型数据???
开发中一定会出现对于相同数据类型的使用操作过程,但是如果按照一个一个的变量定义来进行数据处理,保存和操作,会导致以下一些问题
1. 代码过于臃肿。
2. 变量命名压力很大,阅读性极差
3. 对于数据的操作过程存在压力,没有【普适性】的操作方法
1.2 生活中数组概念
超市
对于商品进行归类处理,同一个区域是同一类商品,同一个货架是一种商品。
图书馆
书籍分类 T Technology
5楼东
1. <<电路>> 同一本书会存储于同一个书架位置上
2. <<电路>> 这本书会有一个唯一编号 T-150
3. <<电路>> 这本书有10本,每一本都有一个独立的编号
T-150-01 ~ T-150-10
总结:
1. 书籍存储统一,并且连续。
2. 书籍有一个统一名字 ==> 统一编号 T-150
3. 每一本书又是一个独立的个体,有一个唯一标记
T-150-01 T-150-05
1.3 Java中定义数组的格式【重点】
格式:
数据类型[] 数组名 = new 数据类型[容量];
赋值号左侧
数据类型:
告知编译器,当前数组中能够保存的数据类型有且只能是哪一个数据类型,其他类
型一概不允许,这里是为了保存【数据类型一致化】
[]:
1. 这里定义的是一个数组类型
2. 告知你数组名是一个【引用数据类型】【指向性】
数组名:
1. 操作数组非常重要的内容
2. 数组名是一个【引用数据类型】【变量】
赋值号右侧
new:
1. new关键字是向内存的【堆区】申请一块内存空间。
内存就是一个仓库,申请内存就是相当于找仓库管理员申请一块区域,用于保
存货物
2. 清空整个申请内存空间中的所有数据。
数据类型:
前后呼应,明确告知编译器当前数组中有且只能保存的数据类型是哪一个。
[容量]:
Capacity
告知编译器当前数组中能够保存的指定数组类型个数是多少个。
并且一旦确定当前容量数据,该容量不可以改变。
1.4 数组定义案例
/*
数据类型[] 数组名 = new 数据类型[容量];
这里定义了一个可以保存10个int类型的数组,
数组名arr
*/
int[] arr = new int[10];
1.5 数组下标
数组下标是当前数组中存储元素的唯一索引标记
比如说一个int类型数组,容量为10,这里就可以使用下标来区分数组中的每一个元素。
数组下标从 0 开始 到 数组容量 - 1
int[] arr = new int[10];
有效下标范围:
0 ~ 9
这里需要操作数组中指定下标元素
数组名[有效下标]; 可以赋值,可以取值
class Demo2 {
public static void main(String[] args) {
/*
数据类型[] 数组名 = new 数据类型[容量];
这里定义了一个可以保存10个int类型的数组,
数组名arr
*/
int[] arr = new int[10];
// 赋值数组中下标为0以及下标为5的元素
arr[0] = 10;
arr[5] = 20;
// 赋值数组中下标为10的元素
// arr[10] = 10;
/*
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at Demo2.main(Demo2.java:15)
ArrayIndexOutOfBoundsException
数组 下标 超出范围 异常 ==> 数组下标越界异常
*/
// 赋值数组中下标为-1的元素
arr[-1] = 10;
/*
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at Demo2.main(Demo2.java:24)
ArrayIndexOutOfBoundsException
数组 下标 超出范围 异常 ==> 数组下标越界异常
注意:
-1是非法下标,在涉及到数组操作的代码中,会使用-1作为一定的错误标记。
*/
// 打印展示数组中下标为0以及下标为5的元素
System.out.println("arr[0] : " + arr[0]);
System.out.println("arr[5] : " + arr[5]);
}
}
1.6 数组内存分析图
image.png1.7 数组和循环
数组算法中大量的使用到循环,尤其是for循环!!!因为数组存在有效下标操作的方式,并且下标操作有一定的范围和等差数列内容。
/* for循环和数组联用 */
class Demo3 {
public static void main(String[] args) {
/*
这里定义了一个int类型数组,容量为10
数组名是arr
*/
int[] arr = new int[10];
/*
arr.length 获取数组的容量属性
利用循环给数组中的每一个元素进行赋值操作
*/
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
// 利用循环展示数组中的所有元素内容
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
}
}
1.8 数组地址转移分析图
image.png2. 数组和方法关系
2.1 方法参数使用数组
public static void main(String[] args) {
}
/*
main方法所需参数就是一个数组类型,该数组类型是String字符串
数组作为方法的参数:
public static returnType methodName(arugmentType[] arrayName)
*/
需求
给予int类型数组赋值操作
方法分析:
public static
固定格式
返回值类型:
void
方法名:
【见名知意,动宾结构,小驼峰命名法】
assignIntArray
形式参数列表:
这里所需的参数是int数据类型数组
(int[] arr);
方法声明:
public static void assignIntArray(int[] arr);
class Demo5 {
public static void main(String[] args) {
int[] array = new int[10];
// 这里需要调用一个int类型数组作为参数的方法
assignIntArray(array);
printIntArray(array);
}
/**
* 赋值用户指定的int类型数组
*
* @param arr 用户指定的int类型数组
*/
public static void assignIntArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
}
/**
* 展示用户指定的int类型数组
*
* @param arr 用户指定的int类型数组
*/
public static void printIntArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
}
}