0
点赞
收藏
分享

微信扫一扫

JAVA基础语法——方法的定义与使用

巧乐兹_d41f 2022-04-13 阅读 93
java

文章目录

一、方法的基本用法

1.什么是方法(method)

方法就是一个代码片段,类似于c语言中的“函数”。
方法存在的意义(重在体会,不需要特别记):

  1. 是能够模块化的组织代码(当代码比较复杂的时候);
  2. 做到代码被重复使用,一份代码可以在多个位置使用;
  3. 让代码更好理解更简单;
  4. 直接调用现有方法开发,不必重复造轮子。

2.方法的定义语法

//方法定义
public static 方法返回值 方法名称 (方法的形参..[0...N]{
  //方法体代码;
  [return 语句]
  }

方法的调用:返回值变量=方法名称(实参… )

eg定义一个方法,实现两个int的相加
在这里插入图片描述
注意事项:

  1. public 和 static 两个关键字在此处具有特定含义, 我们暂时不讨论, 后面会详细介绍;
  2. 方法定义时, 参数可以没有. 每个参数要指定类型;
  3. 方法定义时, 返回值也可以没有, 如果没有返回值, 则返回值类型应写成 void;
  4. 方法定义时的参数称为 “形参”, 方法调用时的参数称为 “实参”;
  5. 方法的定义必须在类之中, 代码书写在调用位置的上方或者下方均可;
  6. Java 中没有 “函数声明” 这样的概念。

3.方法的调用执行过程

基本规则:

  • 定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行;
  • 当方法被调用的时候, 会将实参赋值给形参;
  • 参数传递完毕后, 就会执行到方法体代码;
  • 当方法执行完毕之后(遇到 return 语句), 就执行完毕, 回到方法调用位置继续往下执行;
  • 一个方法可以被多次调用。
class Test {
   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

计算5!+4!+3!+2!+1!:
在这里插入图片描述在这里插入图片描述

4.实参和形参的关系(重要)

在java中,方法的参数传递只有值传递。所谓值传递就是把实参的值拷贝一份拿给形参,对实参没有任何影响。

eg交换两个整型变量:
在这里插入图片描述
刚才的代码, 没有完成数据的交换。对于基础类型来说, 形参相当于实参的拷贝. 即传值调用
在这里插入图片描述
可以看到, 对 a 和 b 的修改, 不影响 x 和 y。

在方法外部交换两个局部变量的场景在java中压根不存在。
这个问题的解决需要引入引用数据类型(数组或对象)。
在这里插入图片描述

5.没有返回值的方法

方法的返回值可有可无,没有返回值的方法使用void声明,在没有返回值的方法中,仍然可以使用return;表示提前结束方法的调用。
在这里插入图片描述

二、方法的重载

方法重载(overload)和方法重写(override)的区别:
方法的重载发生在“同一个类中”,定义了若干个方法名称相同,参数列表不同(参数的类型或者个数不同)的一组方法,与返回值无关!
这样的一组方法称为重载方法
在这里插入图片描述

三、方法递归

1.什么是方法递归

所谓的方法递归就是在一个方法执行的内部,自己调用了自己的过程,称之为“递归”。

递归就分两个子过程:
递过程:函数不断调用自身,直到走到函数的终止条件,第一阶段结束;
归过程:函数不断返回的过程称为归过程。

public void test(){
  test()
}

在方法执行过程中再调用了一次方法,就叫方法的递归。

2.什么场景下能用方法递归

三个条件,缺一不可。
在这里插入图片描述

3.如何写出递归代码

写递归函数时,千万不要纠结这个函数内部到底咋实现,而要注意这个方法的语义(这个函数到底有什么功能),你就假设,这个方法别人已经写好了,你只是调用这个方法而已。

求一个整数num的阶乘

在这里插入图片描述

写出递归代码 = 终止条件 + 不借助任何方法就能实现的步骤 + 剩下的问题利用这个方法去解决
假设这个factor方法别人已经写好了,自己只需要关心如何调用这个方法辅助自己解决问题就好!!

//传入一个整数num就能求出这个num的阶乘值!!!
public static int factor(int num){
   //终止条件(不借助任何函数调用的基础上就能直接解决问题)
   if(num == 1){
      //无需借助任何外部力量,我就知道num=1阶乘值就是1!
      return 1;
   }
   //num>=2
   //我只知道num本身的值是多少,至于(num-1)!不知道,交给别的函数  去帮我处理
   //调用factor(num-1)=> 能帮我求出(num-1)!
   //最后一步,我只需要拼接答案 
   return num * factor(num - 1)
 }

定义一个方法,求出1+2+3+…+num的和是多少:
在这里插入图片描述
在这里插入图片描述
写一个递归方法,输入一个非负整数,返回组成它的数字之和。例如,输入 1729,则应该返回1+7+2+9,它的和是19:

拆分 => 把一个四位数拆分为1 + 剩下的三位数的和 => 当前三位数7 + 两位数的和 => 当前十位2 => 个位的和
终止条件,所谓终止条件就是不借助任何函数就能直接知道答案的值,当num就是个位数的时候,组成他的各个位数只有自己。
在这里插入图片描述

4.递归的执行过程

在这里插入图片描述
这就是整个递归函数的微观执行过程。
在这里插入图片描述

举报

相关推荐

0 条评论