资源描述
Click to edit Master title style,Click to edit Master text stylesgood1,Second levelgood2,Third levelgood3,Fourth levelgood4,Fifth levelgood5,JAVA 应用开发详解,数组与方法,数组定义及使用,目标,掌握数组的作用,掌握数组的声明及内存分配,通过数组的简单范例加深数组操作的理解,掌握多维数组的定义及使用,数组,数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组、多维数组。,数组的优点:,不使用数组定义100个整型变量:int i1;int i2;int i100,使用数组定义:int i100,一维数组,一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的。,要使用Java的数组,必须经过两个步骤:(1)声明数组、(2)分配内存给该数组。这两个步骤的语法如下:,声明形式一:,声明一维数组:数据类型 数组名=null;,分配内存给数组:数组名=new 数据类型长度;,声明形式二:,声明一维数组:数据类型 数组名=null;,声明一维数组,数组的声明格式里,“数据类型”是声明数组元素的数据类型,常见的类型有整型、浮点型与字符型等。,“数组名”是用来统一这组相同数据类型的元素的名称,其命名规则和变量的相同,建议使用有意义的名称为数组命名。,数组声明后实际上是在栈内存中保存了此数组的名称,接下来便是要在堆内存中配置数组所需的内存,其中“长度”是告诉编译器,所声明的数组要存放多少个元素,而“new”则是命令编译器根据括号里的长度开辟空间。,声明及开辟数组空间,声明数组:,int score=null;,null表示引用数据类型的默认值,为数组开辟空间:,score=new int3;,栈内存和堆内存,程序中定义的,基本类型的变量,和,引用类型变量,在,栈内存,中分配。,堆内存,用来存放由new创建的对象和数组,堆栈内存的解释,数组操作中,在栈内存中保存的永远是数组的名称,只开辟了栈内存空间数组是永远无法使用的,必须有指向的堆内存才可以使用,要想开辟新的堆内存则必须使用new关键字,之后只是将此堆内存的使用权交给了对应的栈内存空间,而且一个堆内存空间可以同时被多个栈内存空间指向,即:一个人可以有多个名字,人就相当于堆内存,名字就相当于栈内存,数组,int x;,x=new int100;,x=null;,的内存状态变化情况,声明数组的同时分配内存空间,声明数组的同时分配内存:,数据类型 数组名=new 数据类型个数,int score=new int10;,声明一个元素个数为10的整型数组score,同时开辟一块内存空间供其使用,在Java中,由于整数数据类型所占用的空间为4个bytes,而整型数组score可保存的元素有10个,所以上例中占用的内存共有4*10=40个字节,数组中元素的表示方法,想要访问数组里的元素,可以利用索引来完成。Java的数组索引编号由0开始,以一个的score10的整形数组为例,score0代表第1个元素,score1代表第2个元素,score9为数组中第10个元素(也就是最后一个元素)。,数组的声明及输出,public,class,ArrayDemo01,public,static,void,main(String args),int,score=,null,;,/声明数组,但未开辟堆内存空间,score=,new,int,3;,/为数组开辟堆内存空间,System.,out,.println(,score0=,+score0);,/分别输出每个元素,System.,out,.println(,score1=,+score1);,/分别输出每个元素,System.,out,.println(,score2=,+score2);,/分别输出每个元素,for,(,int,x=0;x 3;x+),/使用循环依次输出数组中的全部内容,System.,out,.println(,score,+x+,=,+scorex);,访问注意,程序中可以发现,对于数组的访问采用“数组名称下标”的方式,之前一共开辟了三个空间大小的数组,所以下标的取值是02,假设程序中取出的内容超过了这个下标,如“score3”,则程序运行的时候会出现以下的错误提示:,:3,为数组中的元素赋值并进行输出,public,class,ArrayDemo02,public,static,void,main(String args),int,score=,null,;,/声明数组,但未开辟堆内存,score=,new,int,3;,/为数组开辟堆内存空间,大小为3,for,(,int,x=0;x 3;x+),/为数组中的每个元素赋值,scorex=x*2+1;,/为每一个元素赋值,for,(,int,x=0;x 3;x+),/使用循环依次输出数组中的全部内容,System.,out,.println(,score,+x+,=,+scorex);,代码及内存分析 I,代码及内存分析 II,代码及内存分析 III,取得数组长度,要特别注意的是,在Java中取得数组的长度(也就是数组元素的长度)可以利用“数组名称.length”完成,如下面的格式:,数组名称.length,返回一个int型数据,public,class,ArrayDemo03,public,static,void,main(String args),int,score=,new,int,3;,/声明并实例化数组,System.,out,.println(,数组长度为,+score.,length,);,/求出数组长度,数组的静态初始化,数组的内容分为动态初始化和静态初始化两种,之前所讲解的全部代码读者可以发现是采用先声明数组之后为数组中的每个内容赋值的方式完成的。那么也可以通过数组静态初始化在数组声明时就指定其具体内容。,如果想直接在声明时就给数组赋初值,可以利用大括号完成。只要在数组的声明格式后面再加上初值的赋值即可,如下面的格式:,数据类型 数组名=初值0,初值1,初值n,数组的静态初始化,public,class,ArrayDemo04,public,static,void,main(String args),int,score=91,92,93,94,95,96;,/使用静态初始化声明数组,for,(,int,x=0;x score.,length,;x+),/循环输出,System.,out,.println(,score,+x+,=,+scorex);,数组应用范例 求出数组中的最大和最小值,public,class,ArrayDemo05,public,static,void,main(String args),int,score=67,89,87,69,90,100,75,90;,/静态初始化数组,int,max=0;,/定义变量保存最大值,int,min=0;,/定义变量保存最小值,max=min=score0;,/把第一个元素的内容赋值给max和min,for,(,int,x=0;x max),/依次判断后续元素是否比max大,max=scorex;,/如果大,则修改max内容,if,(scorexmin),/依次判断后续的元素是否比min小,min=scorex;,/如果小,则修改min内容,System.,out,.println(,最高成绩:,+max);,/输出最大值,System.,out,.println(,最低成绩:,+min);,/输出最小值,对整型数组按照由小到大的顺序进行排列,public,class,ArrayDemo06,public,static,void,main(String args),int,score=67,89,87,69,90,100,75,90;,/声明数组,for,(,int,i=1;i score.,length,;i+),/循环判断,for,(,int,j=0;j score.,length,;j+),if,(scorei scorej),/交换位置,int,temp=scorei;,scorei=scorej;,scorej=temp;,for,(,int,i=0;i score.,length,;i+),/数组输出,System.,out,.print(scorei+,t,);,二维数组,如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。,二维数组声明的方式和一维数组类似,内存的分配也一样是用new这个关键字。其声明与分配内存的格式如下所示:,动态初始化:,数据类型 数组名;,数组名=new 数据类型行的个数列的个数;,动态初始化:,数据类型 数组名=new 数据类型行的个数列的个数;,二维数组的存储,声明整型数组score,同时为其开辟一块内存空间,int score=new int43;,整型数据score可保存的元素有4*3=12个,而在Java中,int数据类型所占用的空间为4个字节,因此该整型数组占用的内存共为4*12=48个字节,二维数组的定义及使用,public,class,ArrayDemo08,public,static,void,main(String args),int,score=,new,int,43;,/声明并实例化二维数组,score01=30;,/为数组中的部分内容赋值,score10=31;,/为数组中的部分内容赋值,score22=32;,/为数组中的部分内容赋值,score31=33;,/为数组中的部分内容赋值,score11=30;,/为数组中的部分内容赋值,for,(,int,i=0;i score.,length,;i+),/外层循环行,for,(,int,j=0;jscorei.,length,;j+),/内层循环列,System.,out,.print(scoreij+,t,);,System.,out,.println(,);,/换行,二维数组静态初始化,格式:,数据类型 数组名=第0行初值,第1行初值,第n行初值,;,声明二维数组:,int,score=67,61,78,89,83,99,100,98,66,95 ;,使用静态初始化声明一个二维数组,public,class,ArrayDemo09,public,static,void,main(String args),/静态初始化一个二维数组,每行的数组元素个数不一样,int,score=67,61,78,89,83,99,100,98,66,95 ;,for,(,int,i=0;i score.,length,;i+),/外层循环输出行,for,(,int,j=0;j scorei.,length,;j+),/内存循环输出列,System.,out,.print(scoreij+,t,);,/输出每一个元素,System.,out,.println(,);,/换行,多维数组,经过前面一、二维数组的练习后不难发现,想要提高数组的维数,只要在声明数组的时候将索引与中括号再加一组即可,所以三维数组的声明为int score,而四维数组为int score,以此类推。,定义和使用三维数组,public,class,ArrayDemo10,public,static,void,main(String args),/定义一个三维数组,使用静态初始化的方式,int,score=5,1,6,7 ,9,4,8,3 ;,for,(,int,i=0;i score.,length,;i+),/第一层循环,for,(,int,j=0;j scorei.,length,;j+),/第二层循环,for,(,int,k=0;k scoreij.,length,;k+),/第三层循环,System.,out,.print
展开阅读全文