java数组
概述
- 数组本身是 引用数据类型 而数组中的元素可以是 任何数据类型 包括基本数据类型和引用数据类型
- 创建数组对象会在内存中开辟一整块 连续的空间 而数组名中引用的是这块连续空间的首地址 。
- 数组 的 长度一旦确定 就不能修改 。
- 可以直接通过下标 或索引 的方式调用指定位置的元素 速度很快 。
- 数组的分类:
按照维度:一维数组 、 二维数组 、 三维数组 。
按照元素的数据类型分:基本数据类型元素的数组 、 引用数据类型元素的数组, 即对象数组。
使用
-
声明方式
Java 中声明数组时不能指定其长度 (数 组中元素的), 例如: int a[5 ]; // 非法
-
初始化
一维 //1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行 int ids[] = new int[]{1001,1002,1003,1004}; //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行 String[] names = new String[5]; names[0]="钱学森" names[1]="邓稼先" names[2]="袁隆平" //错误的写法: //int[] arr1 = new int[]; //int[5] arr2 = new int[5]; //int[] arr3 = new int[3]{1,2,3}; //也是正确的写法: int[] arr4 = {1,2,3,4,5};//类型推断 二维同理 总结,静态初始化直接赋值,不写数组大小。动态初始化需指定数组的形状(大小)
注意默认初始化值:
数组本身是引用类型,所有在二维数组中,第二维的元素默认为null指针
-
内存结构
属于概念理解,一维举例string那边有点瑕疵。
一维:
二维:
一维数组访问简单,通过下标就可以,数组名就是数组开始的地址
二维数组的访问需要注意:
package com.atguigu.java;
/*
规定:二维数组分为外层数组的元素,内层数组的元素:
int[][] arr = new int[4][3];
外层元素:arr[0],arr[1]等
内层元素:arr[0][0],arr[1][2]等
数组元素的默认初始化值 :
针对于初始化方式一:比如:int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同,为对应元素的默认初始化值
针对于初始化方式二:比如:int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。
*/
public class ArrayTest3 {
public static void main(String[] args) {
int[][] arr = new int[4][3];
System.out.println(arr[0]);//[I@15db9742
System.out.println(arr[0][0]);//0
// System.out.println(arr);//[[I@6d06d69c
float[][] arr1 = new float[4][3];
System.out.println(arr1[0]);//地址值
System.out.println(arr1[0][0]);//0.0
String[][] arr2 = new String[4][2];
System.out.println(arr2[1]);//地址值
System.out.println(arr2[1][1]);//null
double[][] arr3 = new double[4][];
System.out.println(arr3[1]);//null
// System.out.println(arr3[1][0]);//报错
}
}
-
数组中常用的算法
排序(待总结)
-
Arrays 工具类的使用
java.util.Arrays 类即为操作数组的工具类 包含了用来操作数组 (比如排序和搜索) 的各种方法
- 数组常见异常
public class ArrayExceptionTest {
public static void main(String[] args) {
//1. 数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
int[] arr = new int[]{1,2,3,4,5};
// for(int i = 0;i <= arr.length;i++){
// System.out.println(arr[i]);
// }
// System.out.println(arr[-2]);
//2.空指针异常:NullPointerException:通过空指针去找值
//情况一:
// int[] arr1 = new int[]{1,2,3};
// arr1 = null;
// System.out.println(arr1[0]);
//情况二:
// int[][] arr2 = new int[4][];
// System.out.println(arr2[0][0]);
//情况三:
String[] arr3 = new String[]{"AA","BB","CC"};
arr3[0] = null;
System.out.println(arr3[0].toString());
}
}