Java中数组的定义与使用详解
目录
- 数组的基本概念
- 数组引用传递
- 数组静态初始化
- 二维数组
- 总结
数组的基本概念 如果说现在要求你定义100个整型变量,那么如果按照之前的做法,可能现在定义的的结构如下:
int i1, i2, i3, ... i100;
但是这个时候如果按照此类方式定义就会非常麻烦,因为这些变量彼此之间没有任何的关联,也就是说如果现在突然再有一个要求,要求你输出这100个变量的内容,意味着你要编写System.out.println()语句100次。
其实所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身属于引用数据类型,那么既然是引用数据类型,这里面实际又会牵扯到内存分配,而数组的定义语法有如下两类。
- 数组动态初始化:
- 声明并开辟数组:
- 数据类型 [] 数组名称 = new 数据类型[长度];
- 数据类型 [] 数组名称 = new 数据类型[长度];
- 分布进行数组空间开辟(实例化)
- 声明并开辟数组:
| ------------- |:-------------?
| 声明数组: | 数组类型 数组名称[] = null; | | | 数组类型 [] 数组名称 =null; | | 开辟数组空间: | 数组名称 =new` 数组类型[长度]; |
那么当数组开辟空间之后,就可以采用如下的方式的操作:
- 数组的访问通过索引完成,即:“数组名称[索引]”,但是需要注意的是,数组的索引从0开始,所以索引的范围就是0 ~ 数组长度-1,例如开辟了3个空间的数组,所以可以使用的索引是:0,1,2,如果此时访问的时候超过了数组的索引范围,会产生
java.lang.ArrayIndexOutOfBoundsException
异常信息; - 当我们数组采用动态初始化开辟空间后,数组里面的每一个元素都是该数组对应数据类型的默认值;
- 数组本身是一个有序的集合操作,所以对于数组的内容操作往往会采用循环的模式完成,数组是一个有限的数据集合,所以应该使用 for 循环。
- 在 Java 中提供有一种动态取得数组长度的方式:数组名称.length;
public class ArrayDemo { public static void main(String args[]) {int data[] = new int[3]; /*开辟了一个长度为3的数组*/data[0] = 10; // 第一个元素data[1] = 20; // 第二个元素data[2] = 30; // 第三个元素for(int x = 0; x < data.length; x++) {System.out.println(data[x]); //通过循环控制索引} }}
数组本身除了声明并开辟空间之外还有另外一种开辟模式。
范例: 采用分步的模式开辟数组空间
public class ArrayDemo { public static void main(String args[]) {int data[] = null; data = https://www.it610.com/article/new int[3]; /*开辟了一个长度为3的数组*/data[0] = 10; // 第一个元素data[1] = 20; // 第二个元素data[2] = 30; // 第三个元素for(int x = 0; x < data.length; x++) {System.out.println(data[x]); //通过循环控制索引} }}
但是千万要记住,数组属于引用数据类型,所以在数组使用之前一定要开辟控件(实例化),如果使用了没有开辟空间的数组,则一定会出现
NullPointerException
异常信息:public class ArrayDemo { public static void main(String args[]) {int data[] = null; System.out.println(data[x]); }}
这一原则和之前讲解的对象是完全相同的。
数组在开发之中一定会使用,但是像上面的操作很少。在以后的实际开发之中,会更多的使用数组概念,而直接使用,99%情况下都只是做一个 for 循环输出。
数组引用传递 既然数组属于引用数据类型,那么也一定可以发生引用传递。在这之前首先来研究一下数组的空间开辟。
范例: 观察一道程序
public class ArrayDemo { public static void main(String args[]) {int data[] = null; data = https://www.it610.com/article/new int[3]; //开辟一个长度为3的数组data[0] = 10; data[1] = 20; data[2] = 30; }}
文章图片
那么既然说到了引用数据类型了,就一定可以发生引用传递,而现在的引用传递的本质也一定是:同一块堆内存空间可以被不同的栈内存所指向。
范例: 定义一个程序
public class ArrayDemo { public static void main(String args[]) {int data[] = null; data = https://www.it610.com/article/new int[3]; //开辟一个长度为3的数组int temp[] = null; //声明对象data[0] = 10; data[1] = 20; data[2] = 30; temp = data; //int temp[] = data; temp[0] = 99; for(int i = 0; i < temp.length; i++) {System.out.println(data[i]); } }}
文章图片
引用传递分析都是一个套路。同一块堆内存被不同的栈内存所指向。
数组静态初始化 在之前所进行的数组定义都有一个明显特点:数组先开辟内存空间,而后再使用索引进行内容的设置,实际上这种做法都叫做动态初始化,而如果希望数组在定义的时候可以同时出现设置内容,那么就可以采用静态初始化完成。
数组的静态初始化一共分为以下两种类型:
Tables | Are |
---|---|
简化格式: | 数据类型 数组名称 = {值, 值,…} |
完整格式: | 数据类型 数组名称 = new 数据类型[] {值, 值,…} |
范例: 采用静态初始化定义数组
public class ArrayDemo { public static void main(String args[]) {int data[] = {1, 2, 4, 545, 11, 32, 13131, 4444}; for(int i = 0; i < data.length; i++) {System.out.println(data[i]); } }}
在开发之中,对于静态数组的初始化强烈建议使用完整语法模式,这样可以轻松地使用匿名数组这一概念。
public class ArrayDemo { public static void main(String args[]) {System.out.println(new int[] {1, 2, 4, 545, 11, 32, 13131, 4444}.length); }}
以后使用静态方式定义数组的时候一定要写上完整格式。
数组最大的缺陷:长度固定。
二维数组 在之前所使用的数组发现只需要一个索引就可以进行访问,那么这样的数组实际上非常像一个数据行的概念。
索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
内容 | 12 | 23 | 44 | 56 | 90 | 445 | 49 | 99 | 1010 |
索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
0 | 12 | 23 | 44 | 56 | 90 | 445 | 49 | 99 | 1010 |
1 | 2 | 3 | 41 | 56 | 9 | 45 | 49 | 99 | 10 |
那么对二维数组的定义有两种声明形式:
- 数组的动态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数];
- 数组的静态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数]{{值, 值,…}, {值, 值,…},…};
范例: 定义一个二维数组
public class ArrayDemo { public static void main(String args[]) {//此时的数组并不是一个等列数组int data[][] = new int[][] {{1, 2, 3}, {4, 5}, {6, 7, 8, 9}}; //如果在进行输出的时候一定要使用双重循环,//外部的循环控制输出的行数,而内部的循环控制输出列数for(int i = 0; i < data.length; i++) {for(int j = 0; j < data[i].length; j++) {System.out.print("data[" + i + "][" + j + "]=" + data[i][j] + "、"); }System.out.println(); } }}
于输出麻烦,所以可以忽略了,在进行开发之中,出现二位数组的几率并不高。
总结 【Java中数组的定义与使用详解】本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募