04函数数组.docx
《04函数数组.docx》由会员分享,可在线阅读,更多相关《04函数数组.docx(17页珍藏版)》请在冰豆网上搜索。
04函数数组
ov第四天、函数和数组
今日任务:
1、函数
i.函数是什么
ii.函数的作用是什么
iii.函数的书写格式是什么
iv.函数怎么定义
v.函数怎么使用
vi.函数调用在内存中的体现(了解)
vii.函数的重载的概念和作用
2、数组
i.数组是什么
ii.数组怎么书写
iii.数组怎么用
iv.数组在内存中的状态
v.数组使用中容易出的问题
vi.数组的常见应用;
1.函数的引入
1.1.函数的引入
需求:
计算1到n的和;
思考:
能不能把相同的代码都抽出来,放到一个地方,等到要使用的时候再去调用呢?
如果有不同的数据,在使用的时候传递就行了;
1.2.函数的概念
1.2.1.函数的概念:
Java中的函数,又叫做方法,是一段独立的代码块,直接写在类的,里面的代码实现了一个独立的功能;
1.2.2.函数的作用:
就是为了解决代码的重用性差的问题的;
1.3.函数的格式
书写格式:
修饰符返回值类型方法名(参数类型形式参数一,参数类型形式参数二……){
功能代码(方法体)
return返回的数据;
}
格式详解:
void:
表示函数不需要返回结果时的函数返回值类型;
return:
表示结束当前所在函数,同时如果函数有结果返回,就通过return将结果返回给调用者;
所有函数都是通过return结束运行的;
如果函数返回值类型是void,return可以省略不写,但是编译器会帮我们加上;
2.函数使用
2.1.函数的声明
需求:
计算两个整数的和;
总结:
声明一个函数,需要先明确两个东西:
1、函数的返回值类型;
2、函数的参数列表;
2.2.函数的调用
2.3.函数书写的误区
误区:
就是在函数定义的功能之外书写额外的功能;
总结:
一个函数一个功能,不属于这个函数的功能,就要新建一个函数实现;
一般,一个函数也不要写太长,一般二三十行够了,再多,就要分解功能,写到不同函数中,在调用;
所以以后的开发中,新功能都要新建一个函数实现,main函数中,只是写功能的调用;
2.4.函数执行内存图解
总结:
Java中,所有函数都是在栈内存中执行的,都是通过return关键字出栈的;
栈内存的特点是先进后出;正在执行的函数一定是位于栈顶的函数,在栈底的函数一定是main函数;
当main函数出栈,整个程序也将结束运行;
3.函数的重载(overload)overload
需求:
计算两个整数的和;
解决:
使用函数的重载;
3.1.重载的概念(overload)
概念:
在同一个类中,可以定义多个名称相同、参数列表不同的函数,这种情况就叫做函数的重载;
参数列表不同:
参数的个数不同;
voidmethod(inta);
voidmethod(inta,intb)
不同类型的参数的顺序不同;
voidmethod(inta,intb)
//voidmethod(intb,inta):
不算
voidmethod(inta,charb);
voidmethod(chara,intb);
强调:
函数的重载,只和函数名以及参数列表有关系,和函数的返回值类型无关!
强调:
函数的重载,只和函数名以及参数列表有关系,和函数的返回值类型无关!
强调:
函数的重载,只和函数名以及参数列表有关系,和函数的返回值类型无关!
3.2.重载函数的调用
总结:
调用函数时,是通过函数名和参数列表共同确定的一个函数;
3.3.重载的好处
让开发者需要记忆的函数名大大降低,提高开发效率;
注意:
一般是类似的功能写成重载的;
3.4.重载练习
已知函数:
publicstaticintadd(inta,charb){}
下列那些函数与之重载?
a:
publicstaticvoidadd(intb,chara){}:
不重载
b:
publicstaticintadd1(inta,charb){}:
不重载
c:
publicstaticvoidadd(inta){}:
重载
d:
publicstaticvoidadd(chara,intb){}:
重载
e:
publicstaticvoidadd(){}:
重载
4.函数总结
4.1.函数的概念:
函数是定义在类中的一段独立的代码块,实现一个功能;
Java中,函数又称为方法;
4.2.函数的作用:
提高代码的复用性,降低开发和维护的成本;
4.3.函数的格式:
修饰符函数的返回值类型函数名(参数类型形式参数1,参数类型形式参数2……)
{
方法体代码(实现具体功能);
return语句;
}
如果函数没有结果返回,返回值类型就是void,此时return语句可以省略,编译器会帮我们加上;
return,结束当前所在函数,如果有结果返回,就通过return将具体的数据返回给调用者;
4.4.函数的定义:
先要根据函数的功能明确两点:
1、函数的返回值类型;
2、函数的参数列表;
4.5.函数定义的误区:
一个函数一个功能,不要再规定的功能之外再添加其他功能代码;
4.6.函数的内存图解:
栈内存的特点:
先进后出;
函数都是在栈内存中运行;
在运行的函数永远是栈顶的那个;
4.7.函数的重载:
概念:
在同一个类中,可以定义多个名称相同、参数列表不同的函数;
强调:
重载的概念和函数的名字和参数列表有关,和函数的返回值类型无关;
好处:
降低开发者需要记忆的函数名的数量,提高开发效率;
调用:
通过函数名和参数列表共同确定一个函数;
5.数组的引入
5.1.问题引入
需求:
计算一个班级100人的考试总分;
思考:
生活中,遇到这种数量众多的东西,怎么传递?
装箱子等,需要使用一个东西装起来;
也就是说,数量众多的散东西,需要使用一个容器装起来,然后直接传递容器就方便了;
现在是Java中,有100个数据需要传递,有没有一个容器可以将它们都装起来呢?
有,可以使用数组;
5.2.数组的概念
数组,就是容器,只能存放相同类型的数据;
5.3.数组的格式
数据类型[]数组名=new数据类型[数组的容量];
数据类型数组名[]=new数据类型[数组的容量];
数组名,其实就是一个变量名(标识符);
6.数组的使用
6.1.数组元素的存取&数组的索引
数组中存放的数据,就是数组的元素;
所有数组中元素都有一个序号(索引、下标、角标……),都是从0开始,连续递增的(0,1,2,3,4……),最大值是数组容量减一;
数组元素的存取,都是通过数组的索引完成的;
总结:
数组元素的存放和取出,都是通过数组的索引实现的;
6.2.数组的遍历&数组的length属性
数组的遍历:
数组的length属性:
在生活中,容器的容量是不是固定的?
都是固定的;
一个数组一旦建立,数组的容量也是确定不变的;
要想知道数组的容量是多少,就要通过数组本身的一个属性获取:
length属性;
使用方法:
数组名.length;
“.”:
可以读作“的”;
表示数组的长度;
6.3.数组的内存图解
6.3.1.java的内存组成
6.3.2.数组的内存图解
6.3.3.引用传递和按值传递:
引用类型的变量进行传参,实际传递的是保存在变量中指向堆中空间的地址,这种传参情况叫做引用传递;
如果一个引用改变了空间中的值,对所有指向这个空间的引用都有影响;
基本类型的变量进行传参,实际传递的保存在变量中的常量值,这种情况叫做值传递;如果改变一个变量的值,对其他的变量没有影响;
6.4.数组使用中的常见问题
6.4.1.ArrayIndexOutOfBoundsException
6.4.2.NullPointerException
总结:
对于数组中常见的这两个异常,发生后,首先要根据错误提示信息,定位到出错的那一行,然后根据错误提示信息找到错误的原因,然后解决;
7.数组的第二种定义格式
数组的第一种定义格式:
数据类型[]数组名=new数据类型[数组容量];
如果提前已经知道数组中应该存放的数据,就可以使用数组的第二种定义格式,简化数组创建和赋值:
数据类型[]数组名=new数据类型[]{元素1,元素2,……};
简写形式:
数据类型[]数组名={元素1,元素2,……};
注意:
数据类型后面的方括号中不能写数组的容量;
简写形式,只能和数组类型变量的声明写在一行;
8.数组的简单应用
8.1.数组平均值:
例子:
求下列数字的平均值:
1.0,2.4,3.5,4.3,5.1,6.8,7.2,8,9,10
8.2.数组求最大值
例子:
求下列数字的最大值:
1.0,2.4,3.5,4.3,5.1,6.8,7.2,8,9,10
8.3.将数组中的元素转为字符串
例子:
将数组{1,2,3,4}转为:
”[1,2,3,4]”;
8.4.将数组中元素倒序;
例子:
数组{1,2,3,4,5}倒序后为{5,4,3,2,1};