文章目录
- Java方法(函数)
- 一、方法介绍
- 二、方法的定义和调用格式
- 1. 快速入门
- 2. Debug查看方法的执行流程
- 3. 方法调用内存图解
- 4. 带参数方法的定义和调用
- 1)定义和调用格式
- 2)形参和实参
- 5. 带返回值方法的定义和调用
- 6. 方法通用定义格式
- 三、方法常见问题
- 四、方法重载
- 1. 方法重载关系的要求
- 2. 方法重载的好处

Java方法(函数)
一、方法介绍
方法(method)一段具有独立功能的代码块,不调用就不执行
方法的出现:
- 可以将挤在一起的臃肿代码,按照功能进行分类管理
- 方法的出现,可以提高代码的复用性
二、方法的定义和调用格式
1. 快速入门
定义格式:
public static void 方法名() { // 方法体
}
//举例
public static void show() { // 方法体
}
调用格式:
方法名();
show();
我们先通过代码来了解一下方法的使用:
package cn.edu.hgu.method;public class MethodDemo1 {/*方法(函数)介绍:一段具有独立功能的代码块,不调用就不执行。好处:- 可以将挤在一起的臃肿代码,按照功能进行分类管理,提高代码的可阅读性- 方法的出现,可以提高代码的复用性定义格式:public static void 方法名() {// 方法体}方法的调用格式:方法名();注意事项:1.方法与方法之间是平级关系,不允许嵌套定义2.方法不调用就不执行3.方法的定义顺序,和执行顺序无关,要想梳理执行顺序,就看调用顺序*/public static void main(String[] args) {farmer();cook();me();}public static void farmer() {System.out.println("除草");System.out.println("耕地");System.out.println("播种");System.out.println("浇水");System.out.println("收割");}public static void cook() {System.out.println("买菜");System.out.println("洗菜");System.out.println("做菜");}public static void me() {System.out.println("点菜");System.out.println("吃菜");}
}
输出结果为:
注意事项:
- 方法与方法之间是平级关系,不允许嵌套定义
- 方法不调用就不执行
- 方法的定义顺序,和执行顺序无关,要想梳理执行顺序,就看调用顺序
我们初步了解了方法的定义、调用以及相关的注意事项,下面我们通过一个案例来巩固一下所学内容:
需求:定义一个方法,方法中定义两个整数变量, 求出最大值并打印在控制台
分析:
- 根据格式编写方法,方法名自己给出 (见名知意 小驼峰命名法)
- 方法内部定义出两个 int 类型变量
- 使用三元运算符求出最大值
- 调用该方法,让内部的逻辑执行起来
代码如下:
package cn.edu.hgu.test;public class MethodTest {public static void main(String[] args) {getMax();}/*需求:定义一个方法,方法中定义两个整数变量, 求出最大值并打印在控制台*/public static void getMax() {int num1 = 10;int num2 = 20;int max = num1 > num2 ? num1 : num2;System.out.println(max);}
}
输出结果为:20
2. Debug查看方法的执行流程
以刚才的 MethodTest 方法为例,我们稍加修改来使用 Debug 查看方法的执行流程:
使用Debug运行代码:
点击 Step into 进入方法:
点击 Step Over 执行语句:
点击 Step Out 跳出当前方法:
3. 方法调用内存图解
- 方法没有被调用的时候,在方法区中的字节码文件中存放
- 方法被调用的时候,需要进入到栈内存中运行
我们通过下图来了解方法调用内存的步骤:
通过这张图,我们对方法调用内存已经有了一定的了解。
下面,我们来看一个实例:
package cn.edu.hgu.method;public class MethodDemo2 {public static void main(String[] args) {study();}public static void sleep() {System.out.println("睡觉");}public static void eat() {System.out.println("吃饭");}public static void study() {eat();System.out.println("学习");sleep();}
}
输出结果为:
4. 带参数方法的定义和调用
在前面我们在使用方法的时候,使用的固定的数,这样显然不太灵活。。。
下面我们对代码做一下修改,改为带参数的方法:
package cn.edu.hgu.test;public class MethodTest {public static void main(String[] args) {getMax(30, 72);}public static void getMax(int num1, int num2) {int max = num1 > num2 ? num1 : num2;System.out.println(max);}
}
输出结果为:72
这样,我们调用方法的时候,只需要在调用的时候修改里面的参数就可以了。
1)定义和调用格式
定义格式:
public static void 方法名 (数据类型 变量名) { // 方法体
}public static void 方法名(数据类型 变量名1,数据类型 变量名2... ) { // 方法体
}
//举例
public static void call (String name) { ...
}
public static void add (int a, int b) { ...
}
调用格式:
方法名(参数);
方法名(参数1, 参数2);
//举例
call("钢门吹雪");
add(10,20);
2)形参和实参
形参:全称形式参数,是指在定义方法时,所声明的参数
实参:全称实际参数,调用方法时,所传入的参数
5. 带返回值方法的定义和调用
为什么要有带返回值的方法?
我们经常会根据一个方法产出的结果,来去组织另外一段代码逻辑,为了拿到这个方法产生的结果,就需要定义带有返回值的方法
定义格式:
public static 数据类型 方法名 (数据类型 变量名1,数据类型 变量名2... ) { return 数据值;
}
//举例
public static int add (int a, int b) { int c = a + b; return c;
}
public static double getNum () { return 12.3;
}
调用格式:
数据类型 变量名 = 方法名(参数...);
//举例
int result = add(10,20);
6. 方法通用定义格式
public static 返回值类型 方法名( 参数 ) {方法体; return 数据 ;
}
- 定义方法时,要做到两个明确明确参数:
- 主要是明确参数的类型和数量
- 明确返回值类型:主要是明确方法操作完毕之后是否有结果数据,如果有,写对应的数据类型,如果没有,写void
- 调用方法时
- void类型的方法,直接调用即可
- 非void类型的方法,推荐用变量接收调用
三、方法常见问题
- 方法不调用就不执行
- 方法与方法之间是平级关系,不能嵌套定义
- 方法的编写顺序和执行顺序无关
- 方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写,如果要编写return,后面不能跟具体的数据。
- return语句下面,不能编写代码,因为永远执行不到,属于无效的代码
四、方法重载
需求:提供 4 个计算方法,方法功能如下
- 计算两个整数相加的和
- 计算两个小数相加的和
- 计算三个整数相加的和
- 计算三个小数相加的和
public class Test {public static int add1(int a, int b) {return a + b;}public static double add2(double a, double b) {return a + b;}public static int add3(int a, int b, int c) {return a + b + c;}public static double add4(double a, double b, double c) {return a + b + c;}
}
如果我们按照上面这样写,需要我们定义四个不同的方法,但实际上这四个方法都是对参数进行求和操作:
那么,我们是否可以只使用一个方法名,通过不同参数,从而实现不同的功能:
1. 方法重载关系的要求
在同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系
简单记:同一个类中,方法名相同,参数不同的方法
参数不同:个数不同、类型不同、顺序不同
注意:识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关。
我们再来看一个例子:
这个例子中的两个方法虽然参数不同,但实际上它们的参数都是一个整数和一个小数,虽然也符合重载的定义,但实际上并没有什么实际意义。
2. 方法重载的好处
不用记忆过多繁琐的方法名字
就以我们经常使用的打印语句为例,它可以输出整数、小数、字符串、布尔类型等数据。