Java方法(函数)


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("吃菜");
    }
}

输出结果为:

image-20230117103608537

注意事项:

  1. 方法与方法之间是平级关系,不允许嵌套定义
  2. 方法不调用就不执行
  3. 方法的定义顺序,和执行顺序无关,要想梳理执行顺序,就看调用顺序

我们初步了解了方法的定义、调用以及相关的注意事项,下面我们通过一个案例来巩固一下所学内容:

需求:定义一个方法,方法中定义两个整数变量, 求出最大值并打印在控制台

分析:

  • 根据格式编写方法,方法名自己给出 (见名知意 小驼峰命名法)
  • 方法内部定义出两个 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运行代码:

image-20230117132503370

点击 Step into 进入方法:

image-20230117132937955

点击 Step Over 执行语句:

image-20230117133118639

点击 Step Out 跳出当前方法:

image-20230117133224091

3. 方法调用内存图解

  • 方法没有被调用的时候,在方法区中的字节码文件中存放
  • 方法被调用的时候,需要进入到栈内存中运行

image-20230117133659692

我们通过下图来了解方法调用内存的步骤:
在这里插入图片描述

通过这张图,我们对方法调用内存已经有了一定的了解。

下面,我们来看一个实例:

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();
    }
}

输出结果为:

image-20230117144414287

4. 带参数方法的定义和调用

在前面我们在使用方法的时候,使用的固定的数,这样显然不太灵活。。。

image-20230117153429901

下面我们对代码做一下修改,改为带参数的方法:

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)形参和实参

形参:全称形式参数,是指在定义方法时,所声明的参数

实参:全称实际参数,调用方法时,所传入的参数

image-20230117154700957

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 个计算方法,方法功能如下

  1. 计算两个整数相加的和
  2. 计算两个小数相加的和
  3. 计算三个整数相加的和
  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;
     }
}

如果我们按照上面这样写,需要我们定义四个不同的方法,但实际上这四个方法都是对参数进行求和操作:

image-20230117165546959

那么,我们是否可以只使用一个方法名,通过不同参数,从而实现不同的功能:

image-20230117165841844

1. 方法重载关系的要求

在同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系

简单记:同一个类中,方法名相同,参数不同的方法

​ 参数不同:个数不同、类型不同、顺序不同

注意:识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关。

image-20230117170022240

我们再来看一个例子:

image-20230117170052207

这个例子中的两个方法虽然参数不同,但实际上它们的参数都是一个整数和一个小数,虽然也符合重载的定义,但实际上并没有什么实际意义。

2. 方法重载的好处

不用记忆过多繁琐的方法名字

image-20230117170324808

就以我们经常使用的打印语句为例,它可以输出整数、小数、字符串、布尔类型等数据。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W_chuanqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值