方法的使用(Java语言)

前言

方法顾名思义就是解决问题的办法,在C语言中,我们将方法称作函数,因此我们可以将Java中的方法理解成C语言中的函数,那么方法存在的意义是什么呢?举个例子:
现在有个同学A问老师:如何下载JDK?如何环境配置?如何下载IDEA?老师说:先这样,再那样,然后这样,最后那样,就可以了。之后又来一个同学B问同样的问题,老师又说了一边,老师发现这样很费事,就在CSDN上写了一个博客,同学C又来问同样的问题,老师说:你去我的博客看一下,博客上有教程,之后每个同学都能通过教程进行JDK下载,环境配置等,这就叫做方法,Java也是如此,将一个复杂的东西或者经常被调用的写成方法,这样通过调用就能实现重复使用了。

方法的基本用法

方法定义语法

基本语法:
方法定义:

public static 方法返回值 方法名称(参数){
	方法体代码;
	ruturn 返回值;
}

方法调用:

返回值变量 = 方法名称(实参)

举个例子:求1~n的和

public static int sumAdd(int n) {
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum = sum + i;
        }
        return sum;
    }
    public static void main(String[] args) {
        int ret=sumAdd(10);
        System.out.println(ret);
    }

我们创建一个sumAdd()的方法,跟C语言几乎没有区别,唯一的区别在于在返回值前面加上了public static,调用时我们用ret接收sumAdd()的返回值。
注意实现:

  1. 方法定义时, 参数可以没有. 每个参数要指定类型。
  2. 方法定义时, 返回值也可以没有, 如果没有返回值, 则返回值类型应写成 void。
  3. 方法定义时的参数称为 “形参”, 方法调用时的参数称为 “实参”。
  4. 方法的定义必须在类之中, 代码书写在调用位置的上方或者下方均可。
  5. Java 中没有 “函数声明” 这样的概念。

我们在再来看一个例子:求1!+2!+……+n!的和

 public static int fac(int n) {
        int ret = 1;
        for (int i = 1; i <= n; i++) {
            ret = ret * i;
        }
        return ret;
    }

    public static int facSum(int n) {
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum = sum + fac(i);
        }
        return sum;
    }

    public static void main(String[] args) {
        System.out.println(facSum(5));
    }

在这里插入图片描述
我们可以看到,我们用了两个方法,第一个是fac()方法,这个方法是求n!的值,而facSum()方法是求所有阶乘的和,我们可以发现方法中是可以在调用方法的。

实参和形参的关系

我们先看一个经典的例子:交换两个数字

public static void swap(int a, int b) {
        int tmp;
        tmp = a;
        a = b;
        b = tmp;
    }
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("交换前:"+a+" "+b);
        swap(a,b);
        System.out.println("交换后:"+a+" "+b);
    }

在这里插入图片描述
我们发现交换前后并没有发生变化,有同学会说,这是值传递,实参的值传给了形参,所以实参并没有发生变化,对的!值传递对实参没有影响,只会影响形参,但是一旦函数调用完,形参就会销毁,所以完成不了交换的方法,有的同学说了,C语言我们学过,可以传地址,是的!C语言是可以传地址,但是Java不可以,Java和C最大的区别就是没有地址的概念,所以Java并没有传地址的操作,因此我们无法传地址,那么我们没有办法写这个方法了嘛?当然不是,只是以我们的现在水平无法解决而已,我们现在这里留个悬念。

没有返回值的方法

方法的返回值是可选的. 有些时候可以没有的。
我们上面写的交换两个数字的方法就是一个没有返回值的方法(尽管没有实现两个数的交换),我们再来看一个例子:

public static void main(String[] args) {
        int a = 10;
        int b = 20;
        print(a, b);
    }
    public static void print(int x, int y) {
        System.out.println("x = " + x + " y = " + y);
    }

我们可以看到我们实现打印的方法并不需要有返回值,因此方法并不一定需要返回值,是根据需求来的,如果需要返回值,就可以创建返回值的方法,如果不需要,就是用void类型的方法就行了。

方法的重载

方法的重载是Java新引入的概念我们来看一个例子:

public static int add(int a, int b) {
        return a + b;
    }
public static double add(double a, double b) {
        return a + b;
    }
public static void main(String[] args) {
        int a=10;
        int b=20;
        System.out.println(a+b);
        double i=10.5;
        double j=20.5;
        System.out.println(i+j);
    }

我们可以看到这两个方法名字都是add,但是参数的类型是不一样的,这就是一种方法的重载。方法的重载具有什么特征呢?
方法重载的特征:

  1. 方法名相同。
  2. 方法的参数列表不同(个数,类型)。
  3. 方法的返回值不做要求。

方法递归

递归我们在C语言中其实简单的学习过,递归就是一个方法在执行的过程中调用自身,就称为“递归”。
前提:

  1. 有一个趋近于终止的条件
  2. 自己调用自己

我们看一个例子:求n!用递归实现。
首先我们知道n!=n×(n-1)×……×2×1,那么我们可以写成公式写成n!=n×(n-1)!,因此func(n)=n×func(n-1),终止条件就是:当n=1时,跳出循环。

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

在这里插入图片描述
我们以n=3举例,当为3时,3不等于1,tmp=3×fac(2),但是我们并不知道因此计算fac(2),2传进fac(2)中,2不等于1,因此先进行计算tmp=2×fac(1)(此时n=2),方式fac(1)也是需要计算,在进入fac()方法,计算fac(1),1等于1,那么返回1的值,此时fac(1)的值为1,因此fac(2)=2×fac(1)=2×1=2,返回fac(2)的值,因此fac(3)=3×fac(2),所以fac(3)=3×2=6。所以结果为6。我们在用图解来直观的看一遍。
在这里插入图片描述
①—②就是递归中“递”的过程,而③—⑤就是递归中“归”。方法的递归需要一定的积累,所以我们要勤于练习,熟练掌握递归方法的运用。
关于这次方法的使用博客就是这么多了,如果有什么建议或者意见欢迎各位私信评论,谢谢各位!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Solitudefire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值