Java中数组如何定义与使用

Java中数组如何定义与使用

这篇文章主要为大家展示了“Java中数组如何定义与使用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中数组如何定义与使用”这篇文章吧。

数组的基本概念

如果说现在要求你定义100个整型变量,那么如果按照之前的做法,可能现在定义的的结构如下:

inti1,i2,i3,...i100;

但是这个时候如果按照此类方式定义就会非常麻烦,因为这些变量彼此之间没有任何的关联,也就是说如果现在突然再有一个要求,要求你输出这100个变量的内容,意味着你要编写System.out.println()语句100次。

其实所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身属于引用数据类型,那么既然是引用数据类型,这里面实际又会牵扯到内存分配,而数组的定义语法有如下两类。

  • 数组动态初始化:

    • 数据类型 [] 数组名称 =new数据类型[长度];

    • 数据类型 [] 数组名称 =new数据类型[长度];

    • 声明并开辟数组:

    • 分布进行数组空间开辟(实例化)

| Tables | Are |
| ------------- |:-------------?
| 声明数组: | 数组类型 数组名称[] =null; | | | 数组类型 [] 数组名称 =null; | | 开辟数组空间: | 数组名称 =new` 数组类型[长度]; |

那么当数组开辟空间之后,就可以采用如下的方式的操作:

  • 数组的访问通过索引完成,即:“数组名称[索引]”,但是需要注意的是,数组的索引从0开始,所以索引的范围就是0~ 数组长度-1,例如开辟了3个空间的数组,所以可以使用的索引是:0,1,2,如果此时访问的时候超过了数组的索引范围,会产生java.lang.ArrayIndexOutOfBoundsException异常信息;

  • 当我们数组采用动态初始化开辟空间后,数组里面的每一个元素都是该数组对应数据类型的默认值;

  • 数组本身是一个有序的集合操作,所以对于数组的内容操作往往会采用循环的模式完成,数组是一个有限的数据集合,所以应该使用for循环。

  • 在Java中提供有一种动态取得数组长度的方式:数组名称.length;

范例:定义一个int型数组

publicclassArrayDemo{publicstaticvoidmain(Stringargs[]){intdata[]=newint[3];/*开辟了一个长度为3的数组*/data[0]=10;//第一个元素data[1]=20;//第二个元素data[2]=30;//第三个元素for(intx=0;x<data.length;x++){System.out.println(data[x]);//通过循环控制索引}}}

数组本身除了声明并开辟空间之外还有另外一种开辟模式。

范例:采用分步的模式开辟数组空间

publicclassArrayDemo{publicstaticvoidmain(Stringargs[]){intdata[]=null;data=newint[3];/*开辟了一个长度为3的数组*/data[0]=10;//第一个元素data[1]=20;//第二个元素data[2]=30;//第三个元素for(intx=0;x<data.length;x++){System.out.println(data[x]);//通过循环控制索引}}}

但是千万要记住,数组属于引用数据类型,所以在数组使用之前一定要开辟控件(实例化),如果使用了没有开辟空间的数组,则一定会出现NullPointerException异常信息:

publicclassArrayDemo{publicstaticvoidmain(Stringargs[]){intdata[]=null;System.out.println(data[x]);}}

这一原则和之前讲解的对象是完全相同的。

数组在开发之中一定会使用,但是像上面的操作很少。在以后的实际开发之中,会更多的使用数组概念,而直接使用,99%情况下都只是做一个for循环输出。

数组引用传递

既然数组属于引用数据类型,那么也一定可以发生引用传递。在这之前首先来研究一下数组的空间开辟。

范例:观察一道程序

publicclassArrayDemo{publicstaticvoidmain(Stringargs[]){intdata[]=null;data=newint[3];//开辟一个长度为3的数组data[0]=10;data[1]=20;data[2]=30;}}

那么既然说到了引用数据类型了,就一定可以发生引用传递,而现在的引用传递的本质也一定是:同一块堆内存空间可以被不同的栈内存所指向。

范例:定义一个程序

publicclassArrayDemo{publicstaticvoidmain(Stringargs[]){intdata[]=null;data=newint[3];//开辟一个长度为3的数组inttemp[]=null;//声明对象data[0]=10;data[1]=20;data[2]=30;temp=data;//inttemp[]=data;temp[0]=99;for(inti=0;i<temp.length;i++){System.out.println(data[i]);}}}

引用传递分析都是一个套路。同一块堆内存被不同的栈内存所指向。

数组静态初始化

在之前所进行的数组定义都有一个明显特点:数组先开辟内存空间,而后再使用索引进行内容的设置,实际上这种做法都叫做动态初始化,而如果希望数组在定义的时候可以同时出现设置内容,那么就可以采用静态初始化完成。

数组的静态初始化一共分为以下两种类型:

TablesAre
简化格式:数据类型 数组名称 = {值, 值,…}
完整格式:数据类型 数组名称 = new 数据类型[] {值, 值,…}

TablesAre简化格式:数据类型 数组名称 = {值, 值,…}完整格式:数据类型 数组名称 = new 数据类型[] {值, 值,…}

范例:采用静态初始化定义数组

publicclassArrayDemo{publicstaticvoidmain(Stringargs[]){intdata[]={1,2,4,545,11,32,13131,4444};for(inti=0;i<data.length;i++){System.out.println(data[i]);}}}

在开发之中,对于静态数组的初始化强烈建议使用完整语法模式,这样可以轻松地使用匿名数组这一概念。

publicclassArrayDemo{publicstaticvoidmain(Stringargs[]){System.out.println(newint[]{1,2,4,545,11,32,13131,4444}.length);}}

以后使用静态方式定义数组的时候一定要写上完整格式。

数组最大的缺陷:长度固定。

二维数组

在之前所使用的数组发现只需要一个索引就可以进行访问,那么这样的数组实际上非常像一个数据行的概念。

索引012345678
内容122344569044549991010

现在痛过一个索引就可以取得唯一的一个记录。所以这样的数组可以简单理解为一维数组,而二维数组本质上指的是行列集合,也如果要确定某一个数据需要行索引和列索引来进行定位。

索引012345678
0122344569044549991010
1234156945499910

如果要想确定一个数据则数据使用的结构是“数组名称[行索引][列索引]”,所以这样的结构就是一个表的结构。

那么对二维数组的定义有两种声明形式:

  • 数组的动态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数];

  • 数组的静态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数]{{值, 值,…}, {值, 值,…},…};

数组的数组就是二维数组。

范例:定义一个二维数组

publicclassArrayDemo{publicstaticvoidmain(Stringargs[]){//此时的数组并不是一个等列数组intdata[][]=newint[][]{{1,2,3},{4,5},{6,7,8,9}};//如果在进行输出的时候一定要使用双重循环,//外部的循环控制输出的行数,而内部的循环控制输出列数for(inti=0;i<data.length;i++){for(intj=0;j<data[i].length;j++){System.out.print("data["+i+"]["+j+"]="+data[i][j]+"、");}System.out.println();}}}

于输出麻烦,所以可以忽略了,在进行开发之中,出现二位数组的几率并不高。

以上是“Java中数组如何定义与使用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2022-03-03 21:29:08
收藏
分享
海报
0 条评论
17
上一篇:python爬虫中requests库怎么用 下一篇:Lombok中的@Builder注解怎么用
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码