1、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. 函数的概念:Jav
2、a中的函数,又叫做方法,是一段独立的代码块,直接写在类的,里面的代码实现了一个独立的功能;1.2.2. 函数的作用:就是为了解决代码的重用性差的问题的;1.3. 函数的格式书写格式:修饰符 返回值类型 方法名(参数类型 形式参数一,参数类型 形式参数二) 功能代码(方法体)return 返回的数据;格式详解:void:表示函数不需要返回结果时的函数返回值类型;return:表示结束当前所在函数,同时如果函数有结果返回,就通过return将结果返回给调用者;所有函数都是通过return结束运行的;如果函数返回值类型是void,return可以省略不写,但是编译器会帮我们加上;2. 函数使用2.1
3、. 函数的声明需求:计算两个整数的和;总结:声明一个函数,需要先明确两个东西:1、函数的返回值类型;2、函数的参数列表;2.2. 函数的调用 2.3. 函数书写的误区误区:就是在函数定义的功能之外书写额外的功能;总结:一个函数一个功能,不属于这个函数的功能,就要新建一个函数实现;一般,一个函数也不要写太长,一般二三十行够了,再多,就要分解功能,写到不同函数中,在调用;所以以后的开发中,新功能都要新建一个函数实现,main函数中,只是写功能的调用;2.4. 函数执行内存图解总结:Java中,所有函数都是在栈内存中执行的,都是通过return关键字出栈的;栈内存的特点是先进后出;正在执行的函数一定
4、是位于栈顶的函数,在栈底的函数一定是main函数;当main函数出栈,整个程序也将结束运行;3. 函数的重载(overload)overload需求:计算两个整数的和;解决:使用函数的重载;3.1. 重载的概念(overload)概念:在同一个类中,可以定义多个名称相同、参数列表不同的函数,这种情况就叫做函数的重载;参数列表不同:参数的个数不同;void method(int a);void method(int a,int b)不同类型的参数的顺序不同;void method(int a,int b)/void method(int b,int a):不算void method(int a,
5、char b);void method(char a,int b);强调:函数的重载,只和函数名以及参数列表有关系,和函数的返回值类型无关!强调:函数的重载,只和函数名以及参数列表有关系,和函数的返回值类型无关!强调:函数的重载,只和函数名以及参数列表有关系,和函数的返回值类型无关!3.2. 重载函数的调用总结:调用函数时,是通过函数名和参数列表共同确定的一个函数;3.3. 重载的好处让开发者需要记忆的函数名大大降低,提高开发效率;注意:一般是类似的功能写成重载的;3.4. 重载练习已知函数:public static int add(int a,char b)下列那些函数与之重载?a:pub
6、lic static void add(int b,char a): 不重载b:public static int add1(int a,char b):不重载c:public static void add(int a):重载d:public static void add(char a,int b):重载e:public static void add():重载4. 函数总结4.1. 函数的概念:函数是定义在类中的一段独立的代码块,实现一个功能;Java中,函数又称为方法;4.2. 函数的作用:提高代码的复用性,降低开发和维护的成本;4.3. 函数的格式:修饰符 函数的返回值类型 函数名(
7、参数类型 形式参数1,参数类型 形式参数2)方法体代码(实现具体功能);return 语句;如果函数没有结果返回,返回值类型就是void,此时return语句可以省略,编译器会帮我们加上;return,结束当前所在函数,如果有结果返回,就通过return将具体的数据返回给调用者;4.4. 函数的定义:先要根据函数的功能明确两点:1、函数的返回值类型;2、函数的参数列表;4.5. 函数定义的误区:一个函数一个功能,不要再规定的功能之外再添加其他功能代码;4.6. 函数的内存图解:栈内存的特点:先进后出;函数都是在栈内存中运行;在运行的函数永远是栈顶的那个;4.7. 函数的重载:概念:在同一个类中
8、,可以定义多个名称相同、参数列表不同的函数;强调:重载的概念和函数的名字和参数列表有关,和函数的返回值类型无关;好处:降低开发者需要记忆的函数名的数量,提高开发效率;调用:通过函数名和参数列表共同确定一个函数;5. 数组的引入5.1. 问题引入需求:计算一个班级100人的考试总分;思考:生活中,遇到这种数量众多的东西,怎么传递?装箱子等,需要使用一个东西装起来;也就是说,数量众多的散东西,需要使用一个容器装起来,然后直接传递容器就方便了;现在是Java中,有100个数据需要传递,有没有一个容器可以将它们都装起来呢?有,可以使用数组;5.2. 数组的概念数组,就是容器,只能存放相同类型的数据;5
9、.3. 数组的格式数据类型 数组名 = new数据类型数组的容量;数据类型 数组名 = new数据类型数组的容量;数组名,其实就是一个变量名(标识符);6. 数组的使用6.1. 数组元素的存取&数组的索引数组中存放的数据,就是数组的元素;所有数组中元素都有一个序号(索引、下标、角标),都是从0开始,连续递增的(0,1,2,3,4),最大值是数组容量减一;数组元素的存取,都是通过数组的索引完成的;总结:数组元素的存放和取出,都是通过数组的索引实现的;6.2. 数组的遍历&数组的length属性数组的遍历:数组的length属性:在生活中,容器的容量是不是固定的?都是固定的;一个数组一旦建立,数组
10、的容量也是确定不变的;要想知道数组的容量是多少,就要通过数组本身的一个属性获取:length属性;使用方法:数组名. length;“.”:可以读作“的”;表示数组的长度;6.3. 数组的内存图解6.3.1. java的内存组成6.3.2. 数组的内存图解6.3.3. 引用传递和按值传递:引用类型的变量进行传参,实际传递的是保存在变量中指向堆中空间的地址,这种传参情况叫做引用传递;如果一个引用改变了空间中的值,对所有指向这个空间的引用都有影响;基本类型的变量进行传参,实际传递的保存在变量中的常量值,这种情况叫做值传递;如果改变一个变量的值,对其他的变量没有影响;6.4. 数组使用中的常见问题6
11、.4.1. ArrayIndexOutOfBoundsException6.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,108.2. 数组求最大值例子:求下列数字的最大值:1.0,2.4,3.5,4.3,5.1,6.8,7.2,8,9,108.3. 将数组中的元素转为字符串例子:将数组1,2,3,4转为:”1,2,3,4”;8.4. 将数组中元素倒序;例子:数组1,2,3,4,5倒序后为5,4,3,2,1;