黑马程序员_数组

------- android培训java培训、期待与您交流! ----------

数组是存储同一种数据类型多个元素的集合。简单的说就是一个容器。它既可以储存基本数据类型,也可以储存引用数据类型。

1.一维数组的初始化以及定义格式

数组的初始化可以分成动态初始化和静态初始化:

1.动态初始化:只给定数组的长度,由系统进行初始化,定义格式:

int[] arr = new int[5]; 
int arr[] = new int[5];//(这种格式一般不采用)

创建一个长度为5的int型数组,数组中的元素的初始值系统系统给定,为0。

在数组进行默认初始化时,整形的初始化值为0,浮点型的初始化值为0.0;字节型的初始化值为’\u0000’;布尔型的初始化值为false;而应用数据类型的初始化值为null。

2.静态初始化:给出初始化值,长度由系统根据给出元素的个数决定,定义格式如

int[] arr = {1,2,3};

 或

int[] arr = new int []{1,2,3};

其中第二种形式在定义时,中括号中不用再写数组的长度。 

1.1 创建一个数组的内存图解

代码:创建一个长度为3的数组并对数组的第一个元素赋值

public static void main(String[] args) {
 int[] arr = new int[3];
 arr[0] = 4;
}

 

1.2 创建两个个数组三个引用的内存图解 

public static void main(String[] args) {
int[] arr1 = new int[3];
int[] arr2 = new int[2];
int[] arr3 = arr2;
arr1[0] = 2;
arr2[0] = 3;
  arr3[1]=4;
} 

 

1.3 数组内存中的生命周期

一旦创建数组,就会在堆内存中划分一块区域来储存数组实体,当不在有任何引用指向数组时,数组就成了垃圾,最后通过垃圾回收机制清理出内存

 

2 二维数组的的定义

二维数组的定义有三种格式:

int [][] arr = new int [3][2];

也可以写成:

int [] arr[] = new int [3][2];

内存图解如下图:

 

2. int[][] arr = new int[3][];表示定义一个包涵三个一维数组的二维数组,每个一维数组的长可以后面指定。例:

public static void main(String[] args){
int[][] arr = new int[2][];
arr[0] = new int[2];
arr[1] = new int[3];
} 

内存图解如下图:

 

3.

int[][] arr = {{1,2}{3,4,2}{1,2,4,5}};//表示定义一个具有三个一维数组,长度分别为2,3,4的二维数组。

3 遍历数组

3.1 遍历一维数组

public static void arrayDeom() {
int[] arr = {1,2,3,4,5}; //定义一个一维数组
for(int i=0;i<arr.length;i++) { //遍历数组,直到角标等于arr.length-1
System.out.println(arr[i]); //输出第角标为i的元素
}
}

3.2 遍历二维数组

public static void arrayDemo2() {
int[][] arr = {{1,2,3},{4,5,},{6,7,8,9}}; //定义一个二维数组
for(int i=0;i<arr.length;i++) { //遍历二维数组,外层循环直到i等于一维数组长度减1,
for(int j=0;j<arr[i].length;j++) { //内层循环遍历每隔一维数组
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}

3 数组常见异常

数组常见的异常有两个:

1.ArrayIndexOutOfBoundsException:数组索引越界异常

 原因:你访问了不存在的索引。

如 

 int[] arr = {1,2,3};
 System.out.println(arr[3]);

由于数组arr不存在角标为3的元素,就会产生次异常,应该注意的,数组角标的取值范围是从0开始一直都数组的长度减一。

2.NullPointerException:空指针异常

 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。

如:

 int[] arr = {1,2,3};
 arr = null;
 System.out.println(arr[0]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值