第四章 数组与方法

 一、数组的定义及使用

        数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组按照使用可以分为一维数组、二维数组、多维数组。

1、一维数组

一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的。

使用数组的两个步骤:(1)声明数组(2)分配内存。

1.1、声明数组(栈内) 

        1.数据类型 数组名[] = null ;

int score[] = null;à //null表示引用数据类型的默认值

        2.数据类型[] 数组名= null ;

“数据类型”是声明数组元素的数据类型,常见类型有整型、浮点型、字符型等。

“数组名”是统一这组相同数据类型的元素的名称,其命名规则和变量的相同。

        数组声明后实际上是在栈内存中保存了此数组的名称,接下来便是要在堆内存中配置数组所需的内存。

1.2、分配内存(堆内)

1.数组名 = new 数据类型[长度];

score = new int[3];

2.数据类型  数组名[] = new 数据类型[个数]

int score[] = new int[3];

堆栈内存

数组操作中,在栈内存中保存的永远是数组的名称,只开辟了栈内存空间数组是永远无法使用的,必须有指向的堆内存才可以使用。之后只是将此堆内存的使用权交给了对应的栈内存空间。

开辟新的堆内存则必须使用new关键字,命令编译器根据括号里的长度开辟空间。“长度”是告诉编译器,所声明的数组要存放多少个元素。

一个堆内存空间可以同时被多个栈内存空间指向,即:一个人可以有多个名字,人就相当于堆内存,名字就相当于栈内存。

  

        声明一个元素个数为10的整型数组score,同时开辟一块内存空间供其使用。

        在Java中,由于整数数据类型所占用的空间为4个bytes,而整型数组score可保存的元素有10个,所以上例中占用的内存共有4 * 10 = 40个字节

2、数组中元素的表示方法

访问数组里的元素可以利用索引。数组索引编号由0开始。

以一个的score[10]的整形数组为例,score[0]代表第1个元素,score[1]代表第2个元素,score[9]为数组中第10个元素(最后一个元素)。

score[10]:score[0]...score[9]

【例】数组的声明和输出

运行结果:

【例】为数组中的元素赋值并进行输出

运行结果:

3e48ff72891a47108697015cbd5bd0ef.png

取得数组长度

数组名称.length   //返回一个int型数据

【例】取得一个数组的长度

运行结果:

47c1ab0482e54e52b3121378f46e8c89.png

3、数组的静态初始化

数组的内容分为动态初始化和静态初始化两种,动态初始化:先声明数组,再为每个内容赋值。静态化初始:声明数组时指定其具体内容 

数据类型 数组名[] = {初值0 , 初值1 , … , 初值n}

int score[] = {91,92,93,94,95,96};//声明并赋初值

【例】数组的静态初始化

运行结果:

36cd5cf0f6dd4828a84da19414c9f069.png

4、数组应用范例

【例】求出数组中的最大值和最小值

运行结果:

4503d9ff7ff2450eb0f011bc9f1a719d.png

【例】对整型数组按照由小到大的顺序进行排列(冒泡)

运行结果:

【例】修改前代码,显示每次排序结果

运行结果:

5、二维数组

如果把一维数组当成几何中的线性图形,那么二维数组就相当于一个表格。二维数组声明的方式和一维数组类似,内存的分配也是用new这个关键字。

5.1、动态初始化

1.数据类型  数组名[][];

数组名 = new 数据类型[行的个数][列的个数];

int score[][];//声明数组

score = new int[4][3];//配置内存

2.数据类型 数组名[][] = new 数据类型[行的个数][列的个数];

int score[][] = new int[4][3];

【例】二维数组的定义及使用

运行结果:

bf9180cd59b445e18a277dcba900f2a8.png

5.2、静态初始化

数据类型 数组名[][] = {  {第0行初值},{第1行初值},…{第n行初值},};

int score[][] = { { 67, 61 }, { 78, 89, 83 }, { 99, 100, 98, 66, 95 } };

【例】使用静态初始化声明一个二维数组

运行结果:

6、多维数组

提高数组的维数,只需在声明数组的时候将索引与中括号再加一组,三维数组的声明为int score[][][],而四维数组为int score[][][][] …,以此类推。

【例】定义和使用三维数组

运行结果:

二、方法的声明及使用

1、方法的定义

方法:一段可重复调用的代码段

定义格式:

public static void main(String[] args){}

【例】在主方法中调用一个方法

运行结果:

fb0eaf9308ec472ba37b016bb10699cd.png

printInfo()方法执行流程图

       当调用printInfo()方法的时候,程序就会跳转到printInfo()方法中执行,当printInfo()方法全部执行完之后就会返回调用处向下继续执行。

        方法命名规范要求

第一个单词的首字母小写,之后每个单词的首字母大写。

【例】有返回值的方法

运行结果:

3b83b93a7e1d46418d52192a13cf2560.png

2、方法的重载

方法名称相同,参数的类型和个数不同,通过传递参数的个数及类型不同以完成不同功能的方法调用。

【例】验证方法的重载

运行结果:

方法重载的调用

从程序中可以发现add()方法被重载了三次,而且每次重载时的参数类型或个数都有不同,所以在调用的时候,会根据参数的类型和个数自动进行区分。

System.out.println()方法也属于重载方法

对于屏幕打印语句:System.out.print()方法来说可以打印任何的数据:

System.out.println(3); // 输出整数

System.out.println(33.3); // 输出浮点数

System.out.println('3'); // 输出字符

System.out.println(true); // 输出布尔型

System.out.println(3 + 3); // 输出计算结果

重载的注意事项

方法的重载一定只是在参数上的类型或个数不同,而下面的代码根本不叫方法重载:

3、使用return结束一个方法

在java的方法定义中,可以使用return语句直接结束方法

【例】使用return语句直接结束方法

运行结果:

4、方法的递归调用

递归调用是一种特殊的调用形式,是方法自己调用自己 。

e15c7c303afc4ea69b17579202a76253.png

【例】递归调用 —— 数字的累加操作

运行结果:

9d204766852a407fa39cc2dd4dbf208a.png

三、数组的引用传递

1、传递及返回数组

之前的方法操作传递和返回的都是基本数据类型,但是方法中也可用来传递和返回数组。 如果要向方法中传递一个数组,则方法的接收参数处必须是符合其类型的数组。

而且数组属于引用数据类型,在把数组传递进方法之后,如果方法对数组本身做了任何修改,修改结果都是会保存下来的。

【例】向方法中传递数组

运行结果:

3199c968a0414ceb8b3798098e4689bc.png

内存状态

1e63fcd9ed654d7d9255d955f5d20bfc.png e9842e8d43804959b25f9ca5fa66ebd6.png

fa5b3bfb1d414adaad07c024d83d3c3b.png 0a195a9eab5a4c4dbf523b746ac358d9.png

使用方法返回一个数组

方法可以接收一个数组,也可以返回一个数组,只需要在返回值类型声明处明确的写出返回的数组类型即可。

【例】使用方法返回一个数组

运行结果:

2、范例 数组排序

【例】数组排序

运行结果:

引用传递

【例】使用Java类库完成数组的排序操作

运行结果:

3、范例 数组复制

        给定两个数组,可以将其中一个数组的指定位置的内容拷贝另外一个数组。

        使用方法,在方法中接收五个参数:“源数组名称、源数组开始点、目标数组名称、目标数组开始点、拷贝长度”,则按照以上的思路完成代码。

【例】数组复制

运行结果:

【例】使用Java类库完成数组的复制操作

Arraycopy()

运行结果:

四、Java新特性对数组的支持

1、可变参数

        在调用一个方法时,必须根据方法的定义传递指定的参数,但是在JDK 1.5(JAVA SE 5.0)之后产生了新的概念 —— 可变参数,即:方法中可以接收的参数不再固定,而是随着需要传递的,可变参数的定义格式如下:

        返回值类型 方法名称(类型…参数名称){}

【例】使用可变参数定义方法

运行结果:

2、foreach输出

数组的输出,一般都会使用for循环输出,但在JDK 1.5之后为了方便数组的输出,提供了一种foreach语法,此语法的使用格式如下:

for(数据类型 变量名称 : 数组名称){

        …

}

【例】使用foreach语法输出数组内容

运行结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值