你的必备技能 —— 方法

本文详细介绍了Java中的方法,包括方法的定义、参数传递、方法的重载原则以及实例。强调了方法的原子性和命名规范,并通过示例展示了如何找到两个或三个数的最大值。此外,解释了Java中参数传递的特点,即仅支持传值,以及方法重载的关键在于参数列表的不同。最后,提到了方法递归的概念,但未展开讨论。
摘要由CSDN通过智能技术生成

方法


方法介绍

  • Java中的方法等同于C语言中的函数
  • 是能够模块化的组织代码(当代码规模比较复杂的时候),做到代码被重复利用,一份代码可以在斗个位置是使用,让代码更好的理解,更为简单
  • 可以直接调用现有的方法开发,不必重复造轮子、

设计方法的原则

  • 方法的本意是功能块,就是某个功能的语句块的集合,我们设计方法的时候,最好保持方法的原子性:就是一个方法只完成一个功能,这样利于我们后期的扩展
  • 方法名采用小驼峰的命名方式

方法的定义

在这里插入图片描述


方法代码实战

  • 判断两个数值的最大值的需求:
  • 使用不同的形式表示:

代码1:


public class Study1 {
    /*求返回一个最大值*/
    public static void main (String[] args) {
        int num = max(99,100);
        System.out.println("最大值为:"+num);
    }
    public static int max (int x,int y) {
        return x > y ? x : y;
    }
}

代码2:


public class Study1 {
    /*求返回一个最大值的进一步探究*/
    public static void main (String[] args) {
        Study1 max = new Study1();
        int num = max.max1(0,99);
        System.out.println("最大值为:"+num);
    }
    
    public static int max2 (int x,int y) {
        return x > y ? x : y;
    }
}

代码3:


public class Study1 {
    /*求三个数值的最大值的探究*/
    public static void main (String[] args) {
        Study1 max3 = new Study1();
        int num = max3(1,10,100);
        System.out.println("最大值为:"+num);
    }

    public static int max3 (int x,int y ,int c) {
        int max = x > y ? x : y ;
        max = max > c ? max : c;
        return max;
    }
}

代码4:


public class Study1 {
    /* 求三个数值的最大值的进一步探究*/
    public static void main (String[] args) {
        int max = max4(max4(1,10),100);
        System.out.println("最大值为:"+max);
    }

    public static int max4(int x,int y) {
        if( x > y) {
            return x;
        } else {
            return y;
        }
    }
}

上述代码: 第 5 行代码的解析:int max = max4 ( max4(1,10),100 );

  • 首先从内向外,对(max4)中的 max4( 1, 10 )的方法调用,得到返回值,再对外部的 max4 (得到的返回值,100 );进行方法的i调用
  • 化繁为简,大道至简;

方法的参数传递

  • 方法的中在调用的时候才会栈帧 (开辟空间):开辟空间不是目的,保存数据才是目的,而数据是需要空间保存的,所以才通过开辟空间保存数据
  • 有两种传递参数方式:
    1. 传值
    2. 传地址
  • Java 当中是没有传地址的说法,只有传值的说法
  • 方法的形参,实参

在这里插入图片描述

  • 所以形参的改变,不会对实参有任何的影响
  • 经典例题

代码:


public class Study2 {
// 实参,形参的关系:交换两个数值
    public static void main (String[] args) {
        int a = 10;
        int b = 100;
        System.out.println("输出交换之前的数:"+"a ="+a+","+"b ="+b);
        exchangeNum(a,b);
        System.out.println("输出交换之后的数:"+"a ="+a+","+"b ="+b);
    }
    public static void exchangeNum(int num1 ,int num2) {
        int tmp = 0;
        tmp = num2;
        num2 = num1;
        num1 = tmp;
    }
}

结果:

在这里插入图片描述

  • 我们可以发现其两个数并没有被交换成功
  • 其原因,请看下图:解析

在这里插入图片描述


方法的重载

  • 方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的形参列表。

  • 方法名称**必须**相同

  • 参数列表必须不同**(个数不同,或类型不同,或排列顺序不同)** 一定要满足其中的三个人中任意一个

  • 方法重载与修饰符和返回类型无关

  • 实现理论:

    • 方法名称相同时,编译器会根据调用方法的参数的个数,参数类型等去逐个匹配,已选择对应的方法,如果匹配失败,则编译器报错。
  • 下面验证:


参数个数不同

代码:

public class Study2 {
//    方法的重载探究
    public static void main (String[] args) {
        int threeSum = add(10,10,10);
        System.out.println("三个数值的和 "+threeSum);
        int twoSum = add(10,10);
        System.out.println("两个数值的和 "+twoSum);
    }
    // 求两个数的和
    public static int add (int x,int y) {
        return x+y;
    }
    // 求三个数的和:
    public static int add (int x,int y,int z) {
        return x+y+z;
    }
}

结果:

在这里插入图片描述


类型不同

代码:

public class Study2 {
//    方法的重载探究
    /*参数类型的不同*/
    public static void main (String[] args) {
        System.out.println("两个浮点数的和:"+add(10.0,10.0));
        System.out.println("两个整数的和:"+add(10,10));

    }
    /*求两个浮点数的和*/
    public static double add (double x,double y) {
        return x+y;
    }
    /*求两个整数的和*/
    public static int add (int x,int y) {
        return x+y;
    }
}

结果

在这里插入图片描述


顺序的不同

  • 其实你会发现顺序的不同和类型的不同是 一样的,只是参数的顺序不同,而已;
代码:

public class Study2 {
//    方法的重载探究
    /*求顺序的不同*/
    public static void main (String[] args) {
        System.out.println("返回类型为double方法的调用的值:"+add(10,10.0));
        System.out.println("返回类型int方法的调用的值:"+add(10.0,10));
    }

    public static double add (int x,double y) {
        return x+y;
    }
    public static int add (double x,int y) {
        return (int)(x+y);
    }
}

结果:

在这里插入图片描述


方法的重载与返回类型是无关的

  • 我们改变方法的返回类型是不行的,编译器会发生报错的
  • 改变方法中参数的命名(自定义的标识符)也是不行的,编译器同样会报错呢

代码:

在这里插入图片描述


在这里插入图片描述


方法重载的报错原因:

  • 方法同变量一样不可以重复定义,定义会开辟空间,不可以对同一个变量多次开辟空间,方法也是一样的不可以对同一个方法多次开辟空间,所以同一个变量,方法只能定义一次,
  • 但是声明可以多次,声明不会开辟空间,只是告诉你有这么个东西。
  • 关于定义,和声明更加详细介绍,可以移步到 <(93条消息) 一点都不安静的 ——static_月光下的编程魔术师的博客-CSDN博客>

方法的递归

  • 因为方法的递归是一个重点,以及有一点不简单,所需要的篇幅可能会比较多,
  • 这里就不多介绍了,想要了解的朋友可以移步止 :一递 + 一归 = 递归

最后:

每博一文案

人世间所有的相遇,其实都是前世注定每个人的所见所遇,皆是因为一场缘分。

虽然相遇每分每秒都在发生,但离别也每时每刻都在上演乍见之花,

永远抵不过九处,不厌璀璨烟火,永远比不上细水流年余生还请你珍惜这三种人:

  1. 珍惜那个主动联系你的人
  2. 珍惜业余花时间陪你人
  3. 珍惜那个整天惦记你的人

​ —————— 一禅心灵庙语

限于自身水平,其中存在的存在的错误希望大家给予指教,韩信点兵——多多益善!谢谢大家,后会有期,江湖再见!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值