函数
一、引入
存在的问题:
1.
代码冗余,代码量太大
2.
维护性差,复制容易,修改难
如何解决此问题????
1.
对反复的代码只写一次,并对它起个名字
2.
想使用次功能代码时,只需要通过名字执行对应的功能即可。
二、函数的概念【理解】
1.
概念:执行特定功能代码组成的一个整体,可以通过名字反复使用。
2.
使用函数流程:
(1)
定义函数:
a.
函数的声明 : 约定函数实现功能
--
》名字
b.
函数的实现:实现对应的函数约定的功能。
--
》将特点功能代码给出
//
要求用循环实现每一行之间用
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"
);
(2)
函数的调用:通过函数名让函数执行对应的功能代码。
3.
函数的定义位置:定义在类以内,与
main
函数并列的位置。
4.
函数的定义:【开发应用重点】
(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)
函数的实现:
{}
三、函数的调用:【开发应用重点】
1.
函数的调用:函数名
(); //
可以被调用
n
次
2.
带参数的调用: 函数名
(
数值
,
数值
2)
;
// 1
不可以
public class
Test
{
// 2
可以定义函数
public static
void
main
(
String
[]
args
){
System
.
out
.
println
(
"
这是
Main
函数
..."
);
// 3
不可以
}
// 4
可以定义函数
}
// 5
不可以
(1)
调用者传递的数值被称为实际参数,简称为实参。
(2)
实参的作用:实参给形参赋值,实参必须和形参 的个数、顺序、类型一致。
3.
带有返回值的函数调用:
(1)
数据类型 变量
=
函数名
(
实参
); //
数据类型 需要和返回值的数据类型一致
(2)
带有返回值的函数调用之后,对结果可以不进行任何处理
//
应用场景几乎没有
(3)
带有返回值的函数调用之后,直接参与打印或是运算
四、函数的作用
1.
减少代码的冗余
2.
提高代码的可维护性
3.
提高代码的重用性
4.
利于分工,协同合作
五、函数的运行机制【理解】
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
);
}