这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战 | 创作学习持续成长,夺宝闯关赢大奖 - 掘金 (juejin.cn)
3.数组元素的默认初始化值
数组是引用类型,它的元素相当于类的成员变量,因此数组一经 分配空间,其中的每个元素也被按照成员变量同样的方式被隐式 初始化。
- 对于基本数据类型而言,默认初始化值各有不同
- 对于引用数据类型而言,默认初始化值为null(注意与0不同!)
public class ArrayTest1 {
public static void main(String[] args) {
//5.数组元素的默认初始化值
int [] arr = new int[4];
for(int i = 0;i < arr.length;i++) {
System.out.println(arr[i]);
}
System.out.println("******************");
short [] arr1 = new short[4];
for(int i = 0;i < arr.length;i++) {
System.out.println(arr1[i]);
}
System.out.println("******************");
double [] arr2 = new double[4];
for(int i = 0;i < arr2.length;i++) {
System.out.println(arr2[i]);
}
System.out.println("******************");
char [] arr3 = new char[4];
for(int i = 0;i < arr3.length;i++) {
System.out.println("----" + arr3[i] + "----");
}
if(arr3[0] == 0) {
System.out.println("hello");
}
System.out.println("******************");
boolean [] arr4 = new boolean[4];
System.out.println(arr4[2]);
System.out.println("******************");
String[] arr5 = new String[4];
System.out.println(arr5[0]);
}
}
4.一维数组的内存分析
(三)多维数组的使用
- Java 语言里提供了支持多维数组的语法。
- 如果说可以把一维数组当成几何中的线性图形, 那么二维数组就相当于是一个表格。
- 对于二维数组的理解,我们可以看成是一维数组 array1又作为另一个一维数组array2的元素而存 在。其实,从数组底层的运行机制来看,其实没 有多维数组。
1.二维数组的声明和初始化
public class ArrayTest2 {
public static void main(String[] args) {
//1.二维数组的声明和初始化
int[] arr = new int[] {1,2,3};//一维数组
//静态初始化
int[][] arr1 = new int[][] {{1,2,3},{4,5},{6,7,8}};//二维数组
//动态初始化1
String[][] arr2 = new String[3][2];
//动态初始化2
String[][] arr3 = new String[3][];//只初始化了二维数组的行
//其他正确初始化
int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//类型推断一维数组同理
int arr6[] = {1,2,3,4};//定义与赋值分开写的话不可类型推断
//2.如何调用数组的指定位置的元素
System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//null
// System.out.println(arr3[1][0]);//arr3定义不完全不知道具体有几列,报错指针异常 arr3[1] = new String[4];//初始化二维数组的列 System.out.println(arr3[1][0]);//null
//3.如何获取数组的长度
System.out.println(arr4.length);//3
System.out.println(arr4[1].length);//4
//4.如何遍历数组
for(int i = 0;i < arr4.length;i++) {
for(int j = 0;j < arr4[i].length;j++) {
System.out.print(arr4[i][j] + "\t");
}
System.out.println();
}
}
}
2.二维数组元素的初始化默认值
规定:二维数组分为外层数组的元素和内层数组的元素
数组元素的初始化默认值
针对于初始化方式一,比如:int arr = new int4;
外层元素的初始值为地址值
内层元素的初始值与一维数组的初始值一致
针对于初始化方式二,比如:int arr = new int4;
外层元素的初始值为null
内层元素报错空指针异常
/*
* 二维数组
*
* 规定:二维数组分为外层数组的元素和内层数组的元素
* 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) {
// 5.数组元素的初始化默认值
int[][] arr = new int[4][3];// 动态声明
System.out.println(arr[0]);// 地址值
System.out.println(arr[0][0]);// 0
// System.out.println(arr);//地址
System.out.println("**********************");
float[][] arr1 = new float[4][3];// 动态声明
System.out.println(arr1[0]);// 地址值
System.out.println(arr1[0][0]);// 0.0
System.out.println("**********************");
String[][] arr2 = new String[4][3];// 动态声明
System.out.println(arr2[1]);// 地址值
System.out.println(arr2[1][1]);// null
System.out.println("**********************");
String[][] arr3 = new String[4][];// 动态声明
System.out.println(arr3[1]);// 内层数组未定义,外层数组为默认值null
// System.out.println(arr3[1][1]);// 内层数组未定义,报错空指针
// 6.数组的内存解析
}
}
3.二维数组的内存分析
(四)数组中涉及到的常见算法
1.数组元素的赋值(杨辉三角、回形数等)
2.求数值型数组中元素的最大值、最小值、平均数、总和等
3.数组的复制、反转、查找(线性查找、二分法查找)
4.数组元素的排序算法
(五)Arrays工具类的使用
java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比 如排序和搜索)的各种方法。
package com.taiacloud.java;
import java.util.Arrays;
/*
* 数组工具类Arrays的使用,java.util.Arrays
*
* 1 boolean equals(int[] a,int[] b) 判断两个数组是否相等。
* 2 String toString(int[] a) 输出数组信息。
* 3 void fill(int[] a,int val) 将指定值填充到数组之中。
* 4 void sort(int[] a) 对数组进行排序。
* 5 int binarySearch(int[] a,int key) 对排序后的数组进行二分法检索指定的值。
*
* */
public class ArraysTest {
public static void main(String[] args) {
//1 boolean equals(int[] a,int[] b) 判断两个数组是否相等。
int [] arr1 = new int[] {1,2,3,4};
int [] arr2 = new int[] {1,3,2,4};
boolean isEquals = Arrays.equals(arr1, arr2);
System.out.println(isEquals);//false
//2 String toString(int[] a) 输出数组信息。
System.out.println(Arrays.toString(arr2));
//3 void fill(int[] a,int val) 将指定值填充到数组之中,把原数组中每一个元素都进行替换。
Arrays.fill(arr1,10);
System.out.println(Arrays.toString(arr1));
//4 void sort(int[] a) 对数组进行排序。
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
//5 int binarySearch(int[] a,int key) 对排序后的数组进行二分法检索指定的值。
int isFind = Arrays.binarySearch(arr2,4);
System.out.println(isFind);//找到之后返回指定值的索引,找不到则返回一个负数
}
}
(六)数组使用中的常见异常
package com.taiacloud.java;
import java.util.Arrays;
/*
* 数组中的常见异常
* 1.数组脚标越界的异常 ArrayIndexOutOfBoundsExcetion
* 2.空指针异常 NullPointerExcetion
*
*
* */
public class ArrayException {
public static void main(String[] args) {
// 1.数组脚标越界的异常 ArrayIndexOutOfBoundsExcetion
// int [] arr = new int[] {1,2,3,4};
// for(int i = 0;i <= arr.length;i++) {
// System.out.print(arr[i] + "\t");
// }
//2.空指针异常 NullPointerExcetion
//情况一
// 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());
//数组名【脚标】.toString() 输出数组中指定脚标的元素
//Arrays.toString(数组名) 遍历输出数组
}
}