天天看点

java学习笔记19:数组详解

1、数组的初始化

数组就是同一种类型数据的集合。其实数组就是一个容器。
数组 语法 示例
一维数组 元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; int[] arr = new int[5];
元素类型[] 数组名 = new 元素类型[]{元素,元素,……}; int[] arr = new int[]{3,5,1,7};
元素类型[] 数组名 = {元素,元素,……}; int[] arr = {3,5,1,7};
二维数组 元素类型[][] 数组名 = new 元素类型[元素个数][元素个数] int[][] arr = new int[3][3];
元素类型[] 数组名[] = new 元素类型[元素个数][元素个数] int[] arr[] = new int[3][3];
元素类型 数组名[][] = new 元素类型[元素个数][元素个数] int arr[][] = new int[3][3];
…………………………… = new 元素类型[个数][个数]{元素,元素} ………… = new int[3][3]{1,1}
1.1 动态初始化

生命声明的时候后面不直接添加元素的

  • 例如,类型[] 名 = new 类型[]
类型 初始默认值
byte
short
int
long
float,double 0.0
boolean false
1.2 静态初始化
生命声明的时候后面直接添加元素
  • 例如,类型[] 名 = new 类型[]{}; 或者 类型[] 名 = {}简化声明赋值只能在同一行

2、数组基本操作

2.1 遍历

arr.length

数组的长度
int[] x = { 1, 2, 3 };
for (int y = 0; y < x.length; y++) {
	System.out.println(x[y]);
}
           
2.2 反转
// 遍历数组
for(int i = 0;i < arr.length / 2;i++){
	// 交换元素
	int temp = arr[arr.length -i - 1];
	arr[arr.length -i - 1] = arr[i];
	arr[i] = temp;
}
           
2.3 最值
for (int i = 0; i<array.length;i++){
	if (array[i]<minValue)
		minValue = array[i];
}
           
2.4 查值

Arrays类

binarySearch()

方法,可以使用二分搜索法来搜索指定的数组。该方法返回要搜索元素的

索引值

int a[] = new int[n];
int x = sc.nextInt();
int index = Arrays.binarySearch(a, x);
           
  • 查表法
  • 基本查找法
2.5 main函数参数数组
  • 运行Java程序的同时,可以通过输入参数给main函数中的接收参数数组args[],供程序内部使用!即当你在Java命令行后面带上参数,Java虚拟机就直接把它们存放到了main方法中的参数String数组里了。
  • args是Java命令行参数,因为参数可以为多个,所以要用数组来存我们在DOS中执行Java程序的时候使用“java 文件名 args参数”。args这个数组可以接收到这些参数。
注:如果程序要使用用命令行参数的话就必须在java运行前指定相应的参数。
public class Test {  
	public static void main(String[] args) {  
		System.out.println(args[0]);  
		System.out.println(args[1]);  
		System.out.println(args[2]);  
	}  
}  

用控制台编译: javac Test.java
运行: Java Test aaa bbb ccc
记得运行那一行代码后面带上三个参数~~~参数之间用空格隔开!
在eclipse中选择运行参数就可以选择,添加参数运行+
           

3、数组的常见异常

  • NullPointerException

    空指针异常
    原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。
  • ArrayIndexOutOfBoundsException

    索引值越界。
    原因:访问了不存在的索引值。

4 、数组的内存分析

  • 数组是一种引用内存,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。

实际的数组对象被存放在堆内存(heap)中,数组的引用变量被存储在栈内存中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uY8e5xq2-1610904109242)(D:\u(backups)]\note\java\img\19-1.JPG)

  • array1

    aray2

    都是引用类型变量,存储的都是地址。当执行

    array2=array1

    后,

    array2

    的指向对象发生改变,见红色指引线。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ufFhE6dK-1610904109243)(D:\u(backups)]\note\java\img\19-2.JPG)