第四章、数组和方法
4–1、数组
数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组和多维数组。
4-1-1、一维数组
一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的。
要使用java的数组,必须经过两个步骤:
声明数组
分配内存给该数组
声明形式一:
数据类型 数组名[ ]=null; //声明一维数组
数组名=new 数据类型[长度]; //分配内存给数组
声明形式二:
数据类型[ ] 数组名=null;
数组的声明格式里,数据类型是声明数组元素的数据类型,常见的类型有整型、浮点型和字符型等;数组名是用来统一这组相同数据类型的元素名称,其命名规则和变量的相同,建议使用有意义的名称为数组命名。数组声明后实际上是在栈内存中保存了此数组的名称,接下来便是要在堆内存中配置数组所需的内存,其中长度是告诉编译器,所声明的数组要存放多少个元素,而new则是命令编译器根据括号里的长度在内存中开辟相应的空间。
变量的命名规则:第一个单词的首字母小写,之后每个单词的首字母大写
堆栈内存的解释:
数组操作中,在栈内存中保存的永远是数组的名称,只开辟了栈内存空间数组是永远无法使用的,必须有指向的堆内存才可以使用,要想开辟新的堆内存则必须使用new关键字,之后只是将此堆内存的使用权交给了对应的栈内存空间,而且一个堆内存空间可以同时被多个栈内存空间指向,即:一个人可以有多个名字,人就相当于堆内存,名字就相当于栈内存。
4-1-2、数组的静态初始化
之前定义的数组都是动态初始化数组,所有的内容在数组声明的时候并不具体的指定,而都是以默认值的形式出现。
静态初始化就是指在数组定义之后,直接指明其内容。
4-1-3、排序
在数组中,排序操作是一种比较常见的算法。下面通过一个简单的例子来演示数组排序操作:
4-1-4、二维数组
如果说要吧把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。
二维数组声明的方式和一维数组类似,内存的分配也一样是用new这个关键字,其声明与分配内存的格式如下所示:
动态初始化:
数据类型 数组名[ ][ ];
数组名=new 数据类型[行的个数][列的个数];
静态初始化:
数据类型 数组名[ ][ ]=new 数据类型[行的个数][列的个数];
二维数组的存储:
声明整型数组score,同时为其开辟一块内存空间:
int score[ ][ ]=new int[4][3];
整型数据score可保存的元素有4*3=12个,而在java中,int数据类型所占用的空间为4个字节,因此该整型数组占用的内存共为4*12=48个字节。
4-1-5、多维数组
从一、二维数组可以发现,想要提高数组的维数,只要在声明数组的时候将索引与中括号再加一组即可,所以三维数组的声明为int score[ ][ ][ ],而四维数组为int score[ ][ ][ ][ ]……,以此类推。
4-2、方法的声明及使用
方法就是一段可重复调用的代码段,例如:有某段长度约100行的代码,要在多个地方使用此段代码,如果在各个地方都重复编写此总分代码的话,则肯定会比较麻烦,而且此部分代码如果修改的话也比较困难,所以此时可以将此部分代码定义成一个方法,以供程序反复调用。
方法的定义格式:
public static 返回值类型 方法名称(类型 参数1,类型 参数2,……){
方法的主体
程序语句; 方法的主体
[return表达式];
}
在此定义的方法,因为其可以直接使用主方法(main())调用,所以将方法声明处加上了public static两个关键字。
定义一个方法在主方法中调用:
如果在返回值类型上写上的是一个void,则表示此方法没有返回值,则就不能使用return返回内容。
在printInfo()中定义了很多行的代码,这些代码在调用的时候只需要调用方法名称即可。
在定义方法的时候也是有命名规范要求的:第一个单词的首字母小写,之后每个单词的首字母大写。
一个有返回值的方法:
4-3、方法的重载
方法的重载就是方法名称相同,但参数的类型和参数的个数不同,通过传递参数的个数及类型不同以完成不同功能的方法调用。
从程序中可以发现add()方法被重载了三次,而且每次重载时的参数类型或个数都有不同,所以在调用的时候,会根据参数的类型和个数自动进行区分。
注意事项:方法的重载一定只是在参数上的类型或个数不同。
方法重载一定是根据参数的类型或个数来判断的。
4-4、使用return结束一个方法
return可以返回一个方法的结果,也可以结束一个方法。
4-5、方法的递归调用
递归调用是一种特殊的调用形式,是方法自己调用自己。
例如:完成一个数字的累加操作,除了可以使用循环的方式完成,也可以通过递归的方式:
在运用递归调用方法时,一定要明确的写出方法的结束判断,否则会出现操作的内在溢出。
4-6、数组的引用传递
一个方法可以接收一个数组,也可以返回一个数组,如果方法接收一个数组的话,则此方法对数组所做的修改全部被保留下来。
方法除了可以接收数组之外,也可以通过方法返回一个数组,只需要在返回值类型上,明确的声明出返回的类型是数组即可。
4-7、范例讲解
4-6-1、定义排序方法
以上只是完成了整型数组的排序操作,如果一个操作中即要求可以排序整型也可以排序浮点型等各种数据,如果分别实现则会比较麻烦,所以在java中为了数组操作方便,提供了一个支持。
4-6-2、数组拷贝
可以将一个数组中指定位置的内容拷贝给另外一个数组,如果,此时要设计方法的话,则此方法应该传递多少个参数呢?
源数组
源数组的开始点
目标数组
目标数组的开始点
拷贝的长度
对于这样的拷贝功能,在java中也是有所支持的,直接使用java提供的一个操作语句即可。
4-8、java新特性对数组的支持
在JDK1.5(J2SE5.0)之后,Java中为了方便开发,引入了大量的新特性,如:可变参数、foreach输出。
4-8–1、可变参数
在JDK1.5之前,一个方法在调用的时候必须根据其规定的参数传递参数,规定了五个,就必须传递五个,但是在JDK1.5之后,为了让方法更加具有灵活性,使用了可变参数的概念,即:方法中可以接收的参数不再是固定的,而是随着需要传递的,可变参数的定义格式如下:
返回值类型 方法名称(类型 …… 参数名称){}
所有的可变参数接收之后都是以数组的形式保存下来的,所以直接按数组的方式接收即可:
4-8–2、foreach输出
此语句也是新的特性,而且在以后的开发中也会使用到。
数组的输出一般都会使用for循环,但在JDK1.5之后,为了方便数组的输出,提供了一种foreach语法,此语法的使用格式如下:
for(数据类型 变量名称:数组名称){
……
}
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容