文章目录
- 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. 方法重载的好处
不用记忆过多繁琐的方法名字
就以我们经常使用的打印语句为例,它可以输出整数、小数、字符串、布尔类型等数据。