方法的使用

目录

一、方法概念及使用

        1.1 什么是方法

         1.2 方法的定义

        1.3 方法调用的执行过程

        1.4 形参与实参的关系

二、方法重载

三、递归


一、方法概念及使用

        1.1 什么是方法

        大家都应该都或多或少的接触过C语言,在C语言中要实现两数相加,我们可以写一个Add函数,在Java中,我们可以把这个函数理解为方法,调用函数就是调用方法。以下是方法存在的意义:

        1. 是能够模块化的组织代码(当代码规模比较复杂的时候)。

         2. 做到代码被重复使用, 一份代码可以在多个位置使用。

         3. 让代码更好理解更简单

         4. 直接调用现有方法开发, 不必重复造轮子

         1.2 方法的定义

// 方法定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}

        咱们来一个例子体验一下:

         实现一个两个整数相加的方法:

public class Method{
// 方法的定义
public static int add(int x, int y) {
return x + y;
}
}

        注意:1. 修饰符:现阶段直接使用public static 固定搭配

        2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成 void

        3. 方法名字:采用小驼峰命名

        4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开

        5. 方法体:方法内部要执行的语句

        6. 在java当中,方法必须写在类当中

        7. 在java当中,方法不能嵌套定义

         8. 在java当中,没有方法声明一说 

        1.3 方法调用的执行过程

        调用方法--->传递参数--->找到方法地址--->执行被调方法的方法体--->被调方法结束返回--->回到主调方法继续往下执行

        大家可这样理解:Java是面向对象编程,不必像C语言一样关注底层。调用方法过程,可想象办事情:首先,找到受理机构,找到其中处理的部门,递交材料,该部门会进行审批什么的,不用你关心,然后告知你成功不成功,然后按照事实在做行动。

        注意:定义方法的时候, 不会执行方法的代码。

        只有调用的时候才会执行。

         一个方法可以被多次调用。

       实例: 计算两个整数相加 

public class Method {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("第一次调用方法之前");
int ret = add(a, b);
System.out.println("第一次调用方法之后");
System.out.println("ret = " + ret);
System.out.println("第二次调用方法之前");
ret = add(30, 50);
System.out.println("第二次调用方法之后");
System.out.println("ret = " + ret);
}
public static int add(int x, int y) {
System.out.println("调用方法中 x = " + x + " y = " + y);
return x + y;
}
}
// 执行结果
一次调用方法之前
调用方法中 x = 10 y = 20
第一次调用方法之后
ret = 30
第二次调用方法之前
调用方法中 x = 30 y = 50
第二次调用方法之后
ret = 80

        1.4 形参与实参的关系

        在我们C语言过程中我们明白:形参是实参的一份临时拷贝,那么,这个结论在Java中是否适用呢?咱们使用一个例子来探究一下:

        题目:交换两个整型变量

public class TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("main: a = " + a + " b = " + b);
}
public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
System.out.println("swap: x = " + x + " y = " + y);
}
}
// 运行结果
swap: x = 20 y = 10
main: a = 10 b = 20

        通过结论我们可以得出,同样适用,即形参是实参的一份临时拷贝。在C语言学习中,我们可以通过指针来完成,但是我们明白Java中没有指针,那么,我们该如何使用方法来完成这个代码呢?答案是:数组。代码如下:

public class TestMethod {
public static void main(String[] args) {
int[] arr = {10, 20};
swap(arr);
System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) {
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
}
}
// 运行结果
arr[0] = 20 arr[1] = 10

二、方法重载

        在我们学习C语言完成转移表(计算器)时,我们要写出不同名字的函数,叫人叫苦不迭,那么在Java中我们还要在经历一遍这样的痛苦吗?答案是:不需要。因为Java有一个功能叫方法重载。

        在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。请各位看如下代码:

public class TestMethod {
    public static void main(String[] args) {
        add(1, 2); // 调用add(int, int)
        add(1.5, 2.5); // 调用add(double, double)
        add(1.5, 2.5, 3.5); // 调用add(double, double, double)
    }
    public static int add(int x, int y) {
        return x + y;
    }
    public static double add(double x, double y) {
        return x + y;
    }
    public static double add(double x, double y, double z) {
        return x + y + z;
    }
}

        在使用方法重载时注意以下几点:

        1. 方法名必须相同

        2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)

         3. 与返回值类型是否相同无关

        4.两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的

        5.编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法

        重载可这样理解:重名这件事在生活中很常见,比如:这有个张三,那有个张三,那么折磨确定你叫的就是你想叫的呢?很简单,加上特征,比如:性别(类型),如果性别一样可以说其它的 ,如:学习好的,长得高的什么的。特征要不一样,不然不仅你无法区分,编译器也无法区分。

三、递归

        想必大家对于递归都不陌生,那递归不就是:“我”调“我自己”,即一个方法在执行过程中调用自身, 就称为 "递归"。

        对于递归,大家应该能想起一个耳熟能详的故事,如下:从前有坐山,山上有座庙,庙里有个老和尚给小和尚将故事,讲的就是: "从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事,讲的就是: "从前有座山,山上有座庙..." "从前有座山……"(此段只是为了活跃气氛)

        想到这,是不是对于递归有了些许认识了呢?递归很简单,即:我调我自己。也可以理解为套娃。

        咱们来几道例题吧:

        1.按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)

public static void print(int num) {
    if (num > 9) {
        print(num / 10);
    }
    System.out.println(num % 10);
}

        2.写一个递归方法,输入一个非负整数,返回组成它的数字之和. 例如,输入 1729, 则应该返回 1+7+2+9,它的和是19

public static int sum(int num) {
    if (num < 10) {
        return num;
    }
    return num % 10 + sum(num / 10);
}

        3.求斐波那契数列的第 N 项

        斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

public static int fib(int n) {
    if (n == 1 || n == 2) {
        return 1;
    }
    return fib(n - 1) + fib(n - 2);
}

    今天的学习到今天就结束了,如有问题可私信,也可在评论区交流。 

完!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值