函数
一、引入
// 要求用循环实现每一行之间用 30个 = 号隔开
System.out.println("好好学习");
for(int i=1;i<=30;i++){
System.out.print("=");
}
System.out.println();
System.out.println("天天向上");
for(int i=1;i<=30;i++){
System.out.print("=");
}
System.out.println();
System.out.println("good good study");
for(int i=1;i<=30;i++){
System.out.print("=");
}
System.out.println();
System.out.println("day day up");
存在的问题:
- 代码冗余,代码量太大
- 维护性差,复制容易,修改难
如何解决此问题????
- 对反复的代码只写一次,并对它起个名字
- 想使用次功能代码时,只需要通过名字执行对应的功能即可。
二、函数的概念【理解】
-
概念:执行特定功能代码组成的一个整体,可以通过名字反复使用。
-
使用函数流程:
(1) 定义函数:
a. 函数的声明 : 约定函数实现功能 --》名字
b. 函数的实现:实现对应的函数约定的功能。–》将特点功能代码给出
(2) 函数的调用:通过函数名让函数执行对应的功能代码。
-
函数的定义位置:定义在类以内,与main函数并列的位置。
~~~java
// 1不可以
public class Test{
// 2可以定义函数
public static void main(String[] args){
System.out.println(“这是Main函数…”);
// 3不可以
}
// 4可以定义函数
}// 5不可以
~~~
-
函数的定义:【开发应用重点】
(1) 语法:public static 返回值类型 函数名(数据类型 变量名,数据类型 变量2){
// 函数的功能代码->函数的实现(函数体)
}
(2) 函数的声明:public static 返回值类型 函数名(数据类型 变量名, 数据类型 变量名2)
函数的返回值类型、函数名、形参列表称为函数的三要素。
a. 函数名: 望文生义,遵循驼峰命名法(第一个单词的首字母小写,其余单词首字母大写)
b. 参数:调用者调用函数的时,传递的数据成为参数。
I. 形式参数: 在函数声明的时候 ()中定义的参数称为形式参数,简称形参。
II. 使用:形式参数它相当于 函数的内容的局部变量,在函数内部可以直接通过参数名直接
使用(只能在当前函数内部使用)
III. 形式参数的定义 :函数声明 (数据类型 参数名,数据类型 参数名) -》 可以定义n个
-》 形参列表
c. 返回值类型 :约定了函数返回给调用者的结果类型
(1) 返回值结果为 void ,则代表函数没有结果返回,但是可以 return ; 结束当前函数的调用。
(2) 返回值类型为 8种基本数据或是对象类型,代表函数必须有 return XXX; 语句
return 返回的结果必须和约定的返回值类型结果一致。
(3) return 的作用:
a. 将函数的结果 返回给调用者
b. 结束当前函数 (return 语句后面不允许在定义任何的语句)
(4) 注意事项:如果 return 语句定义在分支结构中,必须保证每一个分支都有return 语句。
(3) 函数的实现:{}
三、函数的调用:【开发应用重点】
-
函数的调用:函数名(); // 可以被调用 n 次
-
带参数的调用: 函数名(数值,数值2);
(1) 调用者传递的数值被称为实际参数,简称为实参。
(2) 实参的作用:实参给形参赋值,实参必须和形参 的个数、顺序、类型一致。
-
带有返回值的函数调用:
(1) 数据类型 变量 = 函数名(实参); // 数据类型 需要和返回值的数据类型一致
(2) 带有返回值的函数调用之后,对结果可以不进行任何处理 // 应用场景几乎没有
(3) 带有返回值的函数调用之后,直接参与打印或是运算
四、函数的作用
-
减少代码的冗余
-
提高代码的可维护性
-
提高代码的重用性
-
利于分工,协同合作
五、函数的运行机制【理解】
- 函数的嵌套调用:被调函数的内部,又调用了其他的函数。
- 函数的执行原理:程序执行过程中,遇到函数的调用,则程序跳到被调用的函数内部执行,被调用函数执行完之后,如果有返回值带着返回值返回到调用位置,没有返回值,直接返回到被调用的位置,程序继续往下执行。
六、递归调用【理解】
-
概念:一个函数的内部调用了自身函数,这种现象称为递归调用。
-
实际开发中,需要给递归设置合理的出口,避免无穷递归。
-
例子:
//计算 n 的阶乘 = n * n-1 的阶乘 public static int jieCheng(int n){ if(n == 1 || n==0) return 1; // 设置出口 return n*jieCheng(n-1); }