第3章 方法

第3章 方法

作者:张子默

一、章节结构

在这里插入图片描述

二、方法概述

方法概述

方法(method)就是完成特定功能的代码块。

方法的作用

方法的作用就是减少重复代码的编写,提高了代码的复用性。

三、方法格式

方法的定义格式

无参数的方法
public static void 方法名() {
    // 方法体
}

public static void isEvenNumber() {
    方法体;
}

案例

package com.zzm;

/**
 * 用途:无参方法定义
 * 时间:2024/5/12 18:20
 * 创建人:张子默
 */
/*
    定义格式:
        public static void 方法名() {
            // 方法体
        }
 */
public class MethodDemo01 {
    public static void main(String[] args) {
        // 调用方法
        isEvenNumber();
    }

    // 需求:定义一个方法,在方法中定义一个变量,判断该数据是否是偶数
    public static void isEvenNumber() {
        // 在方法中定义一个变量
        int number = 10;
        number = 9;

        // 判断该数据是否是偶数
        if (number % 2 == 0) {
            System.out.println(number + "是偶数");
        } else {
            System.out.println(number + "不是偶数");
        }
    }
}
带参数的方法
public static void 方法名(参数) { ... ...}

public static void 方法名(变量类型 变量名) {... ...}
public static void isEvenNumber(int number) {... ...}

public static void 方法名(数据类型 变量名1, 数据类型 变量名2, ......{... ...}
public static void getMax(int number1, int number2) {... ...}

小贴士:

  • 带参数方法定义时,参数中的数据类型与变量名都不能缺少,缺少任意一个程序将报错
  • 带参数方法定义时,多个参数之间使用逗号(,)分隔

案例

package com.zzm;

/**
 * 用途:带参数方法的定义
 * 时间:2024/5/12 19:01
 * 创建人:张子默
 */
/*
    带参数方法的定义和调用

    定义格式:
        public static void 方法名(参数) {...}
 */
public class MethodDemo02 {
    public static void main(String[] args) {
        // 字面量值调用
        isEvenNumber(10);
        isEvenNumber(9);

        // 变量的调用
        int number = 11;
        isEvenNumber(number);
        number = 12;
        isEvenNumber(number);
    }

    // 定义一个方法,该方法接收一个参数,判断该数据是否是偶数
    public static void isEvenNumber(int number) {
        if (number % 2 == 0) {
            System.out.println(true);
        } else {
            System.out.println(false);
        }
    }
}
带返回值方法的定义和调用
public static 数据类型 方法名(参数) {
    return 数据;
}

public static boolean isEvenNumber(int number) {
    return true;
}

public static int getMax(int a, int b) {
    return 100;
}

小贴士:

  • 带返回值的方法定义时,return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错
  • return用于没有返回值(返回值类型为void)方法时,return后不能有返回值,return用于结束方法
方法定义的通用格式
public static 返回值类型 方法名(参数) {
    方法体;
    return 数据;
}

格式说明

  • public static:修饰符
  • 返回值类型:方法操作完毕后返回的数据的数据类型,如果方法操作完毕,没有数据返回,这里写void,而且方法体中一般不写return
  • 方法名:调用方法时使用的标识
  • 参数:由数据类型和变量名组成,多个参数之间用逗号展开
  • 方法体:完成功能的代码块
  • return:如果方法操作完毕,有数据返回,用于把数据返回给调用者

小贴士:

  • 定义方法时,要做到两个明确:

    • 明确返回值类型:主要是明确方法操作完毕之后是否有数据返回,如果没有,写void,如果有,写对应的数据类型

    • 明确参数:主要是明确参数的类型和数量

  • 在调用方法时,要知道不同返回值类型的方法调用:

    • void类型的方法,直接调用即可
    • 非void类型的方法,推荐用变量接收调用

方法的调用

方法名();
isEvenNumber();

方法名(参数);

方法名(变量名/字面量值);
isEvenNumber(5);

方法名(变量名1/字面量值1, 变量名2/字面量值2, ...);
getMax(10, 20);

数据类型 变量名 = 方法名(参数);
boolean flag = isEvenNumber(5);

小贴士:

  • 方法定义完毕后,需要调用才能执行
  • 方法必须先定义后调用,否则程序会报错
  • 带参方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错
  • 方法的返回值通常会使用变量接收,否则该返回值将无意义

案例

package com.zzm;

/**
 * 用途:带返回值方法的定义和调用
 * 时间:2024/5/12 19:51
 * 创建人:张子默
 */
/*
    带返回值方法的定义和调用

    定义格式:
        public static 数据类型 方法名(参数) {
            return 数据;
        }
 */
public class MethodDemo03 {
    public static void main(String[] args) {
        // isEvenNumber(10);
        // true

        boolean flag = isEvenNumber(10);
        // boolean flag = true;
        System.out.println(flag);

        if (flag) {
            System.out.println("是偶数就输出这句话");
        }
    }

    // 需求:定义一个方法,该方法接收一个参数,判断该数据是否是偶数,并返回真假值
    public static boolean isEvenNumber(int number) {
        if (number % 2 == 0) {
            return true;
        } else {
            return false;
        }
    }
}
package com.zzm;

/**
 * 用途:输出较大值
 * 时间:2024/5/12 20:03
 * 创建人:张子默
 */
/*
    需求:设计一个方法可以获取两个数的较大值,数据来自于参数

    分析:
        1.定义一个方法,用于获取两个数字中的较大数,例如:getMax()
        2.使用if语句对两个数字的大小关系进行处理
        3.分别设置两种情况下对应的返回结果
        4.在main()方法中调用定义好的方法并使用变量保存
 */
public class MethodTest03 {
    public static void main(String[] args) {
        // 在main()方法中调用定义好的方法并使用变量保存
        // int max = getMax(10, 20);
        // System.out.println(max);

        int max = getMax(10, 20); // .var的使用,它能够帮我们自动补齐左边的内容
        System.out.println(max); // max.out能够把max变量放到输出语句中

        System.out.println(getMax(10, 20));
        System.out.println(getMax(10, 20));
    }

    // 定义一个方法,用于获取两个数字中的较大值,例如:getMax()
    public static int getMax(int a, int b) {
        // 使用if语句对两个数字的大小关系进行处理
        // 分别设置两种情况下对应的返回结果
        if (a >= b) {
            return a;
        } else {
            return b;
        }
    }
}

Debug查看方法调用

  • 进入一个方法的时候,需要使用Step Into (F7)
  • 在方法内部,看每一行代码的执行流程,使用Step Over(F8)
  • 注意观察方法的出现和消失,以及变量的变化

方法的参数

  • 形参:形式参数,方法定义中的参数,等同于变量定义格式,例如:int number
  • 实参:实际参数,方法调用中的参数,等同于使用变量或字面量,例如:10 number

在这里插入图片描述

案例

package com.zzm;

/**
 * 用途:输出最大值
 * 时间:2024/5/12 19:27
 * 创建人:张子默
 */
/*
    需求:设计一个方法用于打印两个数中的较大值,数据来自于方法参数

    分析:
        1.定义一个方法,用于打印两个数字中的较大数,例如:getMax()
        2.为方法定义两个参数,用于接收两个数字
        3.使用if语句对两个数字的大小关系进行处理
        4.在main()方法中调用定义好的方法(使用字面量)
        5.在main()方法中调用定义好的方法(使用变量)
 */
public class MethodTest02 {
    public static void main(String[] args) {
        // 在main()方法中调用定义好的方法(使用字面量)
        getMax(10, 20);
        // getMax(a:10, b:20); // idea的智能提示,不要手动去屑a, b
        // getMax(30);
        // getMax(20.0, 30.0);
        // 调用方法的时候,人家要几个就给几个,人家要什么类型就给什么类型

        // 在main()方法中调用定义好的方法(使用变量)
        // int a = 10;
        // int b = 20;
        // getMax(a, b);

        int x = 10;
        int y = 20;
        getMax(x, y);
    }

    // 定义一个方法,用于打印两个数字中的较大值,例如:getMax()
    // 为方法定义两个参数,用于接收两个数字
    public static void getMax(int a, int b) {
        // 使用if语句对两个数字的大小关系进行处理
        if (a > b) {
            System.out.println("较大的数是:" + a);
        } else {
            System.out.println("较大的数是:" + b);
        }
    }
}

方法的注意事项

  • 方法不能嵌套定义

    在这里插入图片描述

  • void表示无返回值,可以省略retuen,也可以单独的书写return,后面不加数据

    在这里插入图片描述

案例

package com.zzm;

/**
 * 用途:方法的注意事项
 * 时间:2024/5/12 20:19
 * 创建人:张子默
 */
/*
    方法注意事项:
        1.方法不能嵌套定义
        2.void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据
 */
public class MethodDemo04 {
    public static void main(String[] args) {

    }

    public static void methodOne() {
        return ;
    }

    public static void methodTwo() {
        // return 100;
        return ;
        // System.out.println("HelloWorld");
    }
}

方法案例

  • 求和

    package com.zzm;
    
    /**
     * 用途:求和
     * 时间:2024/5/12 20:38
     * 创建人:张子默
     */
    /*
        需求:设计一个方法用于求1-n之间的数据和(n > 1),返回求和结果,调用方法,把结果在控制台输出
     */
    public class MethodTest04 {
        public static void main(String[] args) {
            int result = sum(5);
            System.out.println("1-5的和是:" + result);
    
            result = sum(100);
            System.out.println("1-100的和是:" + result);
        }
    
        /*
            使用两个明确分析该方法的参数和返回值
                参数:int n
                返回值类型: int
         */
        public static int sum(int n) {
            int sum = 0;
            for (int i = 1; i <= n; i++) {
                sum += i;
            }
    
            return sum;
        }
    }
    
  • 较大值

    package com.zzm;
    
    /**
     * 用途:较大值
     * 时间:2024/5/12 20:51
     * 创建人:张子默
     */
    /*
        需求:设计一个方法用于获取三个整数的较大值,调用方法,把结果在控制台输出
     */
    public class MethodTest06 {
        public static void main(String[] args) {
    
        }
    
        /*
            使用两个明确分析该方法的参数和返回值
                参数:int a, int b, int c
                返回值类型:int
         */
        public static int getMax(int a, int b, int c) {
            // 获取三个整数较大值
            /*if (a >= b) {
                if (a >= c) {
                    return a;
                } else {
                    return c;
                }
            } else {
                if (b >= c) {
                    return b;
                } else {
                    return c;
                }
            }*/
    
            int tempMax = a > b ? a : b;
            int max = tempMax > c ? tempMax : c;
            return max;
        }
    }
    
  • 水仙花数

    package com.zzm;
    
    /**
     * 用途:水仙花数
     * 时间:2024/5/12 20:58
     * 创建人:张子默
     */
    /*
        需求:设计一个方法用于判断一个整数是否是水仙花数。调用方法,把结果在控制台输出
     */
    public class MethodTest07 {
        public static void main(String[] args) {
            /*boolean flag = isFlower(111);
            System.out.println(flag);
    
            flag = isFlower(153);
            System.out.println(flag);*/
    
            for (int i = 100; i < 1000; i++) {
                // i
                /*boolean flag = isFlower(i);
                if (flag) {
                    System.out.println(i);
                }*/
    
                if (isFlower(i)) {
                    System.out.println(i);
                }
            }
        }
    
        /*
            使用两个明确分析该方法的参数和返回值
                参数:inr number
                返回值类型:boolean
         */
        public static boolean isFlower(int number) {
            // 判断一个整数是否是水仙花数
            int ge = number % 10;
            int shi = number / 10 % 10;
            int bai = number / 100 % 10;
    
            if (ge * ge * ge + shi * shi * shi + bai * bai * bai == number) {
                return true;
            } else {
                return false;
            }
        }
    }
    

四、方法重载

方法重载的概念

方法重载是指同一个类中定义多个方法之间的关系,满足下列条件的多个方法相互构成重载。

  • 多个方法在同一个类中
  • 多个方法具有相同的方法名
  • 多个方法的参数不同,类型不同或者数量不同

在这里插入图片描述

方法重载的特点

  • 类型不同或者数量不同的重载仅是对应方法的定义,与方法的调用无关,调用方式参照标准格式

  • 重载仅针对同一个类中方法的名称和参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载

    在这里插入图片描述

方法重载的好处

计重载的方法,是为了方便调用者,不用记忆太多繁琐的方法名

案例

  • 方法重载
package com.zzm;

/**
 * 用途:方法重载
 * 时间:2024/5/12 21:15
 * 创建人:张子默
 */
/*
    方法重载:
        1.多个方法在同一个类中
        2.多个方法具有相同的方法名
        3.多个方法的参数不相同,类型不同或者数量不同

        调用方法的时候,Java虚拟机会通过参数的不同来区分同名的方法
 */
public class MethodDemo05 {
    public static void main(String[] args) {

    }

    // 需求1:求两个int类型数据和的方法
    public static int sum(int a, int b) {
        return a + b;
    }

    // 需求2:求两个double类型数据和的方法
    public static double sum(double a, double b) {
        return a + b;
    }

    // 需求3:求三个int类型数据和的方法
    public static int sum(int a, int b, int c) {
        return a + b + c;
    }

    // 需求4:求int和double数据和的方法
    public static double sum(int a, double b) {
        return a + b;
    }

    // 参数类型顺序不同重载
    public static double sum(double b,int a) {
        return a + b;
    }
}
  • 比较相等

    package com.zzm;
    
    /**
     * 用途:比较相等
     * 时间:2024/5/12 21:24
     * 创建人:张子默
     */
    /*
        需求:使用方法重载的思想,设计比较数是否相等的方法,兼容类型(byte、short、int、long)
     */
    public class MethodDemo06 {
        public static void main(String[] args) {
            System.out.println(compare(10, 20));
            System.out.println(compare((byte) 10, (byte) 20));
            System.out.println(compare((short) 10, (short) 20));
            System.out.println(compare(10L, 20L));
        }
    
        // int
        public static boolean compare(int a, int b) {
            System.out.println("int");
            return a == b;
        }
    
        // byte
        public static boolean compare(byte a, byte b) {
            System.out.println("byte");
            return a == b;
        }
    
        // short
        public static boolean compare(short a, short b) {
            System.out.println("short");
            return a == b;
        }
    
        // long
        public static boolean compare(long a, long b) {
            System.out.println("long");
            return a == b;
        }
    }
    

五、练习

  • 请简述形参和实参的区别以及作用?

    答:
    形参全称形式参数, 是方法定义时的参数, 作用是接收实参
    实参全称实际参数, 是方法调用时的传递的数据, 它是真正参与运算的数据
    
  • return语句后面还能写代码吗?为什么?

    答:
    return语句后面如果写代码,程序会编译报错
    因为return的作用是返回结果,并结束方法,方法已经结束了,后面的代码就运行不到了
    
  • 请简述什么是方法的重载?

    答:
    在同一个类中,出现了方法名相同,但是参数列表(个数,类型,顺序)不同的方法,它们之间构成了重载关系
    设计重载的方法,是为了方便调用者,不用记忆太多繁琐的方法名
    计算机会根据传递的参数,匹配对应的方法
    
  • 需求描述:设计一个带参数的方法实现求任意两个数的最大值

    public class Test01 {
        public static void main(String[] args) {
            //调用方法,传递参数
            int max = getMax(10, 20);
            //打印返回的最大值
            System.out.println("max:" + max);
        }
    
        //定义方法,接收两个整数
        public static int getMax(int a, int b) {
            //返回比较的结果
            return a > b ? a : b;
        }
    }
    
  • 设计一个带参数的方法实现求1到n之间的偶数和

    public class Test02 {
        public static void main(String[] args) {
            //调用方法,打印结果
            System.out.println("sum:" + getSum(10));
        }
    
        //定义方法,接收一个整数n
        public static int getSum(int n) {
            //定义求和变量
            int sum = 0;
            //获取范围内数据
            for (int i = 1; i <= n; i++) {
                //筛选偶数
                if (i % 2 == 0) {
                    sum += i; //累加
                }
            }
            //返回结果
            return sum;
        }
    }
    

由于本人是利用业余时间整理,时间不是很充裕,本体系内容仍会继续更新,敬请等待…

  • 50
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值