1.1方法的概念
Java
的方法(
Method
)类似于其它语言的函数
(
Function
)
,指一段可以直接被另一段程
序或代码引用的程序或代码。
一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的
高级语言中都有子程序这个概念,用子程序实现模块的功能。
面向过程语言中,整个程序就是由函数(相互调用)组成的
面向对象语言中,方法(函数)是类的组成部份,整个程序是由很多类组成的
通俗讲,方法就是解决某件事情的办法,比如 我要上班,可以选择 步行,骑车,开车,
公共交通,而每一个方式,在程序中就可能是一个方法。
1.2方法的组成要素
方法的组成要素:修饰符 返回值 方法名 参数 方法体 五个要素
1.3方法的补充说明
方法的优点:
1.
使程序变得更简短清晰
2.
有利于程序的维护(修改)
3.
可以提高开发效率
4.
可以提高代码的重用性
方法名的命名规则:
1.
方法名必须以字母 下画线
$
数字组成
2.
不能以数字开头
3.
方法名尽量由单词组成,如果有多个单词,第一个单词首字母小写,其它单词首字母大写
4.
在同一个类中,方法名一般不能重名(方法重载除外)
1.4 方法的声明
语法
访问权限修饰符 其它修饰符 返回值类型 方法名(参数列表)
{
方法体代码
return
返回值
;
(如果返回值类型为
void
此行可省略)
}
//
示例
public static
void
print
(){
System
.
out
.
println
(
"
我是打印方法
"
);
//return;
因为返回值类型为
void
所以此行可省略
}
1.
访问权限修饰符:
public
,
default
【如果没有添加任何的访问权限修饰符,则默认为
default
,而
default
不需要显式的写出来】,目前使用的访问权限修饰符都和
main
方法保
持一致,使用
public
2.
其它修饰符:可以是
static final abstract
等等 也可以没有,在讲面向对象前我们
都用
static
3.
返回值类型:如果有返回值,需要用返回值的类型代替,如果没有返回值 需要用
void
代
替
4.
方法名:符合方法名的命名规则情况下,根据方法的功能,自行定义,最好能见名知义(看
到名字就能明白方法的功能)
5.
参数列表:如果方法所实现的功能中有未知项参与运算,就可以将未知项设置为参数
实际参数:实参,在方法外面定义,表示实际参与运算的值或者变量,作用为了给
形参进行赋值
形式参数:形参,在方法中定义,用于接收实参的值,相当于是一个未被赋值的变
量
形参数据类型 形参变量名称
形参
=
实参;
6.
大括号:方法的实现,里面写方法的功能代码
7.
return
: 将当前方法运行之后的结果进行返回,返回给当前方法的调用者。如果方法声
明为
void
可省略,否则返回实际类型的变量
注意
1
:方法声明(并实现)仅仅是声明了这个方法,方法中的代码不会被执行的
注意
2
:方法声明的位置为类的内部,其它方法的外部
1.5方法的调用
调用语法:
方法名称
(
实参列表
);
//
示例
:
print
();
注意:
a
.
实参的数量和类型必须和形参保持完全的一致,实现书写的顺序也必须和形参中的顺序保持
完全一致
b
.
方法之间只能进行相互的调用,而不能在方法中声明方法,就目前而言声明的方法都和
main
方法是并列的
c
.
定义方法的时候,运算的结果会返回给调用者【在哪个方法中调用,运算的结果返回给哪个
方法】
d
.
方法只有声明,没有调用
.
对当前程序没有任何作用,白写了
.
e
.
方法没有声明,直接调用就会报错,不允许
.
f
.
方法声明的位置为类的内部,其它方法外部的任何位置
,
没有顺序要求
g
.
同一个类中,方法名不能冲突(不能名字相同,只有方法重载情况除外)
h
.
方法中声明的变量都为局部变量。在哪个方法中声明的变量,就只能在哪个方法中使用,在
方法外不能直接访问到
i
.
如果方法没有返回值,则方法调用相当于执行了某个功能,但没有直接结果返回给调用者,
如果方法有返回值,则相当于执行了某个功能,并获得了一个结果(变量),对调用者而言,
相当于接收了一个变量
1.6方法的参数
a.
形参,就是方法声明中的参数,在方法调用前为没有赋值的变量
b.
实参
,
方法调用时,写在方法名后面小括号中的变量或常量
c.
方法被调用时,用实参给形参赋值,这个过程叫传参
d.
传参时需要注意的事项:实参的数量和类型必须和形参的数量和类型保持一致【相兼容的数
据类型】
1,7
1.
在没有返回值的方法中使用
return
语句
,
要求
return
单独成立一条语句,类似于
break
或
者
continue
,后面不能跟任何的数值,直接跟一个分号,此时
return
语句作用为 结束整个
方法的运行。
2.
在有返回值的方法中使用
return
语句,要求
return
后加加空格后跟着需要返回的变量和
结尾的分号,此时
return
语句作用为 结束整个方法的运行,并将返回的变量传给方法的调用
者
.
要求 返回值的实际变量类型需要与方法声明的返回值类型保持一致。
3.
如果方法声明中有返回值,在方法体中使用了选择语句,如果需要有不同情况下的返回结
果,那就都需要写
return
语句
4.
无论在方法体的任何位置出现
return
语句,本次方法的调用都立即结束,返回到调用者。
1.8方法的重载
什么是方法的重载
定义:同一个类中,方法名字相同,参数列表不同,就叫方法重载
说明:
1.
参数列表的不同包括,参数个数不同,参数数据类型不同,参数顺序不同
2.
方法的重载与方法的修饰符和返回值没有任何关系
就是同一个功能的方法,因为参数的不同,调用的具体的方法也不同。
如何判定多个方法是否是重载的?衡量标准,要同时满足以下三条:
A
:必须同一个类中。
B
:方法名称必须一致。
C
:参数列表必须不同。(顺序,个数,类型)
和
static
,
public
,返回值,
void等等都没有关系。
优点:
1
、简化了开发的压力
2
、简化了记忆的压力
3
、调用方法更方便,更简洁,又满足了不同的情况
基本原理:
当方法名称一致时,通过形式参数列表的不同来选择要执行的方法。
1.9方法的递归
定义:在一个方法内,调用方法本身,称为方法的递归
(
注意和重载的区别
)
说明:方法递归包含了一种隐式的循环,会重复执行某段代码,但是这种重复不需要使用循环
语句来进行控制
练习
1
:使用递归计算
1
到数字
n
的和
public class
recursionDemo
{
//
计算
1
到数字
n
的和
public static
int
sum
(
int
n
){
//
数字
1
的和为
1
,直接返回
if
(
n
==
1
){
return
1
;
}
//
数字
2
及以上的数字和为 当前数字本身加上它前面所有数字的和
return
sum
(
n
-
1
)
+
n
;
}
练习2:使用递归计算
1+2+3+...+100
的和
public static
void
main
(
String
[]
args
)
{
int
number
=
5
;
int
sum
=
sum
(
number
);
System
.
out
.
println
(
"
数字
1
到
"
+
number
+
"
的和为
:"
+
sum
);
}
}
public static
int
sum
(
int
num
) {
if
(
num
==
1
) {
return
1
;
}
return
num
+
sum
(
num
-
1
);
}
练习3:
使用递归输出
30
位的斐波那契数列
public static
int
getFibonacci
(
int
index
) {
if
(
index
==
1
||
index
==
2
) {
return
1
;
}
return
getFibonacci
(
index
-
1
)
+
getFibonacci
(
index
-
2
);
}