当前位置:主页 > 查看内容

java基本使用及方法的重载递归

发布时间:2021-09-13 00:00| 位朋友查看

简介:文章目录 一、方法的基本使用 1.什么是方法 2.方法定义语法 3.方法调用和内存的关系 4.形参和实参的关系 二、方法的重载 重载的规则 三、方法的递归 1.递归的注意事项 2.递归过程 3.递归总结 一、方法的基本使用 1.什么是方法 方法就是把一个以后可能会多次……


一、方法的基本使用

1.什么是方法?

方法就是把一个以后可能会多次使用的一段代码,把它封装成一个功能。
可以把方法理解为C语言里的函数,但只是类似于C语言的函数并不是完全相同的。

方法存在的意义:

1.在复杂的场景然代码模块化
2.让一份代码在多个位置重复使用
3.让代码更容易理解
4.多次使用一个功能时,直接调用方法避免代码的冗余

2.方法定义语法

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

//方法调用
返回值变量 = 方法的名称(实参...);

代码示例:
调用方法求两个数的较大值

public class Test{
    public static int max(int a,int b){
        return a>b?a:b;
    }
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        int ret = max(a,b);
        System.out.println(ret);
    }
}

在这里插入图片描述
执行代码会方法返回了两个数的最大值:
在这里插入图片描述

3.方法调用和内存的关系

java中JVM上共有5块内存区域,方法的调用是依赖于站的,每次调用一个方法,都会在栈上为这个方法开辟一块内存,把这个内存叫做:栈帧
我们平时所说的栈:就是JVM Stack 也就是JAVA虚拟机栈
在这里插入图片描述
栈的原理是:先进后出。那我们上面的求两个数的最大值的代码来说
在这里插入图片描述
但方法运行完 return 后
在这里插入图片描述
当整个程序结束后main方法同样也会被释放掉,这就是栈的先进后出原理。

4.形参和实参的关系

实参也叫实际参数,是调用方法传递过去的参数。
形参也叫形式参数,是方法接收实参的参数。
来看一段代码:

public class Test{
    public static void exchange(int a,int b){
        int tmp = a;
        a = b;
        b = tmp;
    }
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        exchange(a,b);
        System.out.println("a="+a+" b="+b);
        
    }
}

运行结果
在这里插入图片描述a和b的值并没有进行交换。
因为我们传递的是实参,接收的是形参。而形参只是实参的一份临时拷贝,在exchange方法里我们交换的只是形参的值。我们上面也说过,方法在调用完后会被自动销毁,所以a和b的值并没有发生改变。

那要怎么样样才能交换这两个值呢,那就是传引用,这里先不细说,后面的博客会讲到。
还有一些要注意的点:
1.在java当中没有取地址(&)这种操作
2.在java中栈上的地址是拿不到的
3.在传递参数时形参和实参要一,一对应(类型和顺序)

二、方法的重载

有些时候我们需要用一个函数同时兼容多种参数的情况, 我们就可以使用到方法的重载。
来看一个例子,就比如我要求两个数的和
在这里插入图片描述

我们可以看到我们这个求和方法,只能求整形但传浮点型的参数时就报错。那是不是还要再写一个函数呢?

public class Test{
    public static int addInt(int a,int b){
        return a+b;
    }
    public  static double addDouble(double a, double b){
        return a+b;
    }
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        double c = 25.5;
        double d = 35.5;
        System.out.println(addInt(a, b));
        System.out.println(addDouble(c, d));

    }
}

那我们是不是改写这样的代码呢?其实这样并不好,int类型一个,double类型一个,那如果我们需要三个或者四个int或者double的数相加呢,那不是要很多个方法名?所以这样并不好。还不如直接都叫add,这里就需要用到方法的重载了。
来看代码

public class Test{
    public static int add(int a,int b){
        return a+b;
    }
    public  static double add(double a, double b){
        return a+b;
    }
    public static int add(int a,int b,int c){
        return a+b+c;
    }
    public static void main(String[] args) {
        int a1 = 100;
        int a2 = 200;
        int a3 = 200;
        double b1 = 25.5;
        double b2 = 35.5;
        System.out.println(add(a1, a2));
        System.out.println(add(a1,a2,a3));
        System.out.println(add(b1,b2));

    }
}

运行结果

在这里插入图片描述
我们发现方法名相同,但参数的返回类型和参数的个数不同都能使用。
同一个方法名字, 提供不同版本的实现, 称为 方法重载
在这里插入图片描述
如果方法名和参数列表都相同,方法重载就会不可用,编译器会报错。

重载的规则:

1.方法名相同
2.方法的参数列表不同(返回类型和参数个数)
3.方法的返回值不做要求(返回值一样或者不一样,不影响重载)

三、方法的递归

递归:其实就是方法自己调用自己的一个过程

1.递归的注意事项

1.要有一个趋近于终止的条件
2.写递归程序时,递归公式是要自己推到的(这也是一个难点)

2.递归过程

来看一段代码,递归求N的阶层

public class Test{
    public static int fac(int n){
        if(n==1){
            return 1;
        }else{
            return n*fac(n-1);
        }
    }
    public static void main(String[] args) {
        System.out.println(fac(4));
    }
}

运行结果
在这里插入图片描述
再来通过图看一下详细的递归过程
在这里插入图片描述

3.递归总结

1.递归其实就是然代码简洁化,有些问题递归和迭代(循环)都能解决,而且迭代会更快。
2.能用迭代用迭代不能迭代用递归。
注意:如果递归程度太深会出现栈溢出异常
栈溢出异常的原因有两种:

1.参数太大
2.终止条件不对


感谢阅读!下一篇数组马上更新!

;原文链接:https://blog.csdn.net/weixin_53946852/article/details/116018551
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐