方法的概念及案例

方法

1. 概述

  • 概述:就是一段具有独立功能的代码块,不调用就不执行

  • 作用:

    • 如果程序里面有好几段内容是需要实现相同功能,不使用方法的话,会导致有大量重复的代码。这种重复代码每次都要重新写一遍。所以如果不用方法,代码的重复度太高,复用性太差

    • 方法的出现,把重复代码变成类似于‘共享单车’的存在,谁有需要就直接用。提高了代码的复用性

  • 前提:

    • 方法必须是先创建才可以使用,该过程称为方法定义
    • 方法创建后并不是直接运行的,需要手动在代码中调用后才可以执行,该过程称为方法调用

2. 方法的定义和调用

  • 格式
//方法定义格式(无参数、无返回值的公共静态方法)
public static void 方法名(){
    //方法体:就是需要复用(被反复使用)的逻辑代码
}
//范例
public static void printHello(){
    System.out.println("Hello method!");
}

//方法调用:方法名();
//范例:
public static void main(String[] args) {
    printHello();
}
  • 注意事项

    • 方法必须先定义后调用,否则程序将报错

    在这里插入图片描述

    • 方法与方法之间是平级关系,不能嵌套定义
      在这里插入图片描述

3. 方法的调用过程

  • 方法没有被低调用的时候,都在方法区中的字节码文件(.class)中存储
  • 方法被调用的时候,需要进入到栈内存中运行

在这里插入图片描述

4. 练习:奇偶数判断

  1. 需求

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yer2bqtM-1654653176979)(day05.assets/1619514609361.png)]

  1. 思路

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0fNKgn7-1654653176981)(day05.assets/1619514649531.png)]

  1. 代码演示
public static void main(String[] args){
    //3.调用方法
    method();
}

//1.定义一个方法,功能为:判断一个数是否为奇数或者偶数
public static void method(){
    //2.判断奇偶数逻辑
    int a=10;
    if(a%2==0){
        System.out.println("偶数");
    }else{
        System.out.println("奇数");
    }
}

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

  • 为什么要有带参数方法

    • 当方法内部逻辑有用到需要根据不同用户,不同需求去变化的值的时候,就可以定义带参数方法,把这种可能会改变的值用方法的参数替代
  • 带参数方法的定义

//单个参数
public static void 方法名(数据类型 变量名){方法体;}
//范例
public static void method(int num){方法体;}

//多个参数
public static void 方法名(数据类型 变量名1,数据类型 变量名2,...){方法体;}
//范例
public static void getMax(int num1,int num2){方法体;}

//注意
//1.方法定义时,参数中的数据类型与变量名都不能缺少,缺少任意一个程序都将报错
//2.方法定义时,多个参数之间使用逗号分隔
  • 带参数方法的调用
    为什么要有带参数方法

  • 当方法内部逻辑有用到需要根据不同用户,不同需求去变化的值的时候,就可以定义带参数方法,把这种可能会改变的值用方法的参数替代

  • 带参数方法的定义

  • //单个参数
    public static void 方法名(数据类型 变量名){方法体;}
    //范例
    public static void method(int num){方法体;}

//多个参数
public static void 方法名(数据类型 变量名1,数据类型 变量名2,…){方法体;}
//范例
public static void getMax(int num1,int num2){方法体;}

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

6. 形参和实参

  1. 概念
    • 形参:形式参数,是指方法定义中的参数
    • 实参:实际参数,方法调用中的参数

在这里插入图片描述

7. 带返回值方法的定义和调用

  • 为什么要有带返回值的方法

    • 我们经常会根据一个方法产出的结果,来去组织另外一段代码逻辑,为了拿到这个方法产生的结果,就需要定义带有返回值的方法
  • 带返回值方法的定义
    在这里插入图片描述

  • 带返回值方法的调用
    在这里插入图片描述

  • 代码演示

//案例:计算两个数的乘积
public static void main(String[] args) {
    //3.调用方法,因为方法定义了两个参数,都是整数,所以这里要给两个整数的实参
    //4.因为方法有返回值,所以可以在方法调用处使用一个变量接收这个方法调用完的返回值
    //5.方法返回值什么类型,接收的变量就应该是什么类型
    int result = cheng(2, 3);
    System.out.println(result);//结果:6
}
//1.两个整数的乘积,结果还是整数,所以返回值类型应该为int
public static int cheng(int num1,int num2) {
    //2.通过return关键,返回乘积
    return num1 * num2;
}

8. 带返回值方法的练习:求两个数的最大值

  • 需求:设计一个方法可以获取两个数的较大值,数据来自于参数

  • 思路:

在这里插入图片描述

9. 方法通用格式

  • 格式
    在这里插入图片描述

10. 方法的注意事项

  • 方法不能嵌套定义

  • 方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写,如果要写return语句,后面不能跟具体的数据

  • return语句下面,不能编写代码,因为永远执行不到,属于无效代码

  • return语句,如果要返回值,只能带回一个结果

//案例:没有返回值的方法,可以省略return不写
public static void eat(){
    System.out.println("吃饭");
    //return的其中一个作用,是结束整个方法,但是不可以带返回值
    return;
    //return 3; 方法本身没有规定返回值,在此处就不能带返回值,因为你也不知道返回什么类型比较合适
}

//案例:计算器加法运算
public static int add(int num1,int num2){
    // return的第二个作用,就是返回一个值
    return num1+num2;
}
    
    

//案例:return语句下面,不能编写代码
public static void drink(int age){
    if(age<8){
         System.out.println("喝白开水");
        //此处是个if判断语句,按照逻辑推断,如果进入if语句中,下面的代码逻辑肯定是不想再执行
        //如果此处不加以限制,if执行结束,代码依然会执行:喝红牛
        //所以此处可以加上return,直接结束方法
        return;
        //注意,说的return下面不能加代码,是指同一个逻辑代码块(大括号)中而已
    }
     System.out.println("喝红牛");
}

11. 方法重载

  • 概念:在同一个类中,方法名相同,参数列表不同(参数顺序不同也算不同,变量名不同不算)的多个方法,形成了方法的重载。

  • 方法签名:JVM调用方法的时候是通过方法签名去区分的,方法签名包括方法名,参数数量、类型和顺序

  • 注意:参数顺序不同虽然也可以构成方法重载,但是不推荐,没有意义

12. 方法重载练习

  • 需求:使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型(byte,short,int,long)

  • 思路:
    在这里插入图片描述

13. 方法参数传递:基本数据类型

  • 方法的形参在内存当中也就是一个变量而已

  • 一个方法在传递参数的时候,如果是基本数据类型,那么传递的就是该变量所记录的具体的数值

public static void main(String[] args) {
    int number = 100;
    System.out.println("main方法中,调用change方法前:" + number);//结果:100
    //基本数据类型,传递的是number的数值,而非变量
    change(number);
    //打印的变量,依然还是main方法中的变量,此变量的值未有任何改变,依然是100
    System.out.println("main方法中,调用change方法后:" + number);//结果:100
}

//方法的形参相当于是这个方法中的一个局部变量,属于change方法,和main方法中的变量不是同一个
public static void change(int number) {
    //在未执行下方赋值操作时,从main方法传递过来的是值100,将100赋值给了change方法的变量number
    //此时修改的是change方法中的变量number值,对main方法中的number无影响
    number = 200;
    System.out.println("在change方法中的:" + number);//结果:200
}

14. 方法参数传递:引用数据类型

  • 方法传递,如果传入的是引用数据类型,传进去的就是该引用数据类型的内存地址
public static void main(String[] args) {
    //定义一个数组,数组是引用数据类型
    int[] arr = {23, 12, 44, 77};
    //该数组在堆内存中的一个空间存放,变量arr持有的是这个空间的地址
    System.out.println("在main方法中,调用change方法前:" + arr[1]);//结果:12
    //arr是引用数据类型变量,传入的就是arr持有的数组在堆内存的地址,而非数组本身
    change(arr);
    System.out.println("在main方法中,调用change方法后:" + arr[1]);//结果:0
}

public static void change(int[] arr) {
    //调用方法,将传递过来的地址赋值给了change方法中的变量arr,change方法中的arr也持有这个地址
    //通过持有的地址,可以找到堆内存中的数组,所以可以对其修改值
    arr[1] = 0;
    //打印的就是修改之后的0值
    System.out.println("在change方法中的:" + arr[1]);//结果:0
}

15. 案例:数组遍历

  • 需求:设计一个方法,用于数组遍历,要求遍历的结果是在一行上的。例如:[11,22,33,44,55]

  • 思路:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0S74Zsxx-1654653176988)(day05.assets/1619679621464.png)]

  • 代码演示
public static void main(String[] args) {
    //1.静态初始化一个数组
    int[] arr = {11, 22, 33, 44, 55};
    printArr(arr);
}

//2.定义一个方法,对数组进行遍历。因为是打印,所以是不需要返回值的
public static void printArr(int[] arr) {
    //3.要打印数组中所有数据,必须要先遍历数组
    for (int i = 0; i < arr.length; i++) {
        //4.将数组中每个元素取出来
        int num = arr[i];
        //5.打印数组中该元素的值,但是因为有格式要求,所以不要换行打印
        //6.当i=0和i是最后一个索引的时候,打印格式要加上中括号
        if (i == 0) {
            System.out.print("[" + num + ", ");
        } else if (i == arr.length - 1) {
            System.out.print(num + "]");
        } else {
            //7.打印的数字之间要用逗号和空格隔开
            System.out.print(num + ", ");
        }
    }
}

















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值