一:数组的定义方式
1:动态初始化
// 数据类型 数组名[] = new 数据类型[大小]
ina a[] = new int [5]; //创建一个数组,名字a,存放5个int
2:第二种动态初始化
//先声明数组,在new分配空间
double scores []; //声明数组
scores = new double [5]; //分配内存空间,可以存放数据
3:静态初始化
//数据类型 数组名[] = new 数据类型 [大小];
int[] num = {1,3,4,6,7,3};
二:数组的注意事项与细节
- 数组是多个相同类型数据的组合,实现对这些数据的统一管理
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
- 数组创建后,如果没有赋值,有默认值
- int 0,short 0, byte 0, long 0
- float 0.0,double 0.0,char \u0000
- boolean false,String null
- 使用数组的步骤
- 1:声明数组并开辟空间
- 2:给数组各个元素赋值
- 3:使用数组
- 数组的下标是从0开始的
- 数组下标必须在指定范围内使用,否则会报:数组下标越界异常
- eg:
- 数组属引用类型,数组型数据是对象(object)
三:数组的赋值机制
```java //基本数据类型赋值:这个值就是具体的数据,而且相互不影响 int n1 = 2; int n2 = n1; //修改n2的值不会影响n1
//数组在默认情况下是引用传递,赋的值是地址。 //理解数组数组赋值的内存图 int[] arr1 = {1,2,3}; int[] arr2 = arr1; //修改arr2同时会影响arr1
![image.png](https://cdn.nlark.com/yuque/0/2022/png/2595924/1658851226530-52e7ccde-51c3-465e-aabe-3bb85df41478.png#clientId=ua1350663-bae7-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=322&id=u22af1192&margin=%5Bobject%20Object%5D&name=image.png&originHeight=322&originWidth=940&originalType=binary&ratio=1&rotation=0&showTitle=false&size=251053&status=done&style=none&taskId=u8a500e06-b679-4650-a263-19b8add032c&title=&width=940)
<a name="DqGrt"></a>
# 四:数组拷贝
```java
public static void main(String[] args) {
int[] arr1 = {10,20,30};
//创建一个arr2,开辟一片新的内存空间
int[] arr2 = new int[arr1.length];
//遍历 arr1 ,把每个元素拷贝到 arr2 对应的元素位置
for(int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
}
五:数组反转
//两种方式
//第一种:倒序输出
//定义数组
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55, 66};
int[] arr2 = new int[arr.length];
//逆序遍历 arr
for(int i = arr.length - 1, j = 0; i >= 0; i--, j++) {
arr2[j] = arr[i];
}
//让arr指向arr2数据空间, 此时 arr 原来的数据空间就没有变量引用
//会被当做垃圾,销毁
arr = arr2;
System.out.println("====arr 的元素情况=====");
//6. 输出 arr 看看
for(int i = 0; i < arr.length;i++){
System.out.println(arr[i]);
}
}
//第二种方式:前后交换
public static void main(String[] args) {
//定义数组
int[] arr = {11, 22, 33, 44, 55,};
int temp = 0;
int len = arr.length;
//通过temp临时值,来进行数据交换
//循环次数为数组长度/2
for( int i = 0; i < len / 2; i++) {
temp = arr[len - 1 - i];//保存
arr[len - 1 - i] = arr[i];
arr[i] = temp;
}
System.out.println("===翻转后数组===");
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");//66,55,44,33,22,11
}
}
六:数组扩容
public static void main(String[] args) {
//定义要扩容的数据
int[] arr = {1,2,3,5,6};
Scanner scanner = new Scanner(System.in);
do {
//通过判断询问是否添加数据
System.out.print("你要添加数据吗(y/n):");
char num1 = scanner.next().charAt(0);
if (num1=='n'){
break;
}
//用num接收添加的数据
System.out.print("请输入你要添加的数据:");
int num = scanner.nextInt();
//扩容的数组长度为原数组+1
int[] arr2 =new int[arr.length+1];
//将arr原来的值赋给新数组
for (int i = 0; i < arr.length; i++) {
arr2[i] =arr[i];
}
//将扩容的数组赋给数组的最后一位
arr2 [arr2.length-1]=num;
//将扩容后的数组指向原来的数组,原来的数组被jvm回收
arr=arr2;
//遍历扩容完成之后的数组
System.out.println("扩容成功,数组元素为");
for (int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i]+" ");
}
//根据需求循环执行程序
System.out.println("您是否还要继续添加数据吗(y/n)");
num1 = scanner.next().charAt(0);
if (num1 == 'n'){
break;
}
}while (true);
}