Java基础语法(五)——方法的使用

227 阅读6分钟

文章目录

本次内容大纲

\

在这里插入图片描述
\

接上篇Java基础语法(四)——程序逻辑控制
\

一. 方法的基本用法

\

1. 什么是方法(method)

\

方法 其实就是把一个重复的东西进行封装,把他封装成一个功能了。

类似于 C语言的函数,但是又不完全相同。

\

方法存在的意义(不要背, 重在体会):

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

\

2. 方法定义语法

\

(1)方法的基本语法

在这里插入图片描述

(2)方法的调用

在这里插入图片描述
\

代码示例:

求 1-100 之间的和

在这里插入图片描述

编译结果:

在这里插入图片描述
\

  我们看到,成功的调用了方法的内容,同时接收了方法的返回值。

  在这个代码练习中,我们知道了方法的基本语法及其调用。

\

(3)Java内存结构

\

在这里插入图片描述
\

  我们对方法的调用,是依赖于栈的

  每次调用一个方法,都会在栈上为这个方法开辟一个内存。把这个内存叫做:栈帧.

  以上面的代码为例,介绍一下方法在内存中的存放.

\

在这里插入图片描述
\

  首先调用的方法是main方法,那么此时在内存中会开辟一块main的栈帧,此时在main里创建了一个ret变量,在main的内存中就存放了ret的空间.

\

  此时再调用add方法,再次开辟一个栈帧,形参为n,存放n的空间,往下走 创建了一个sum 的变量,在存放一个sum的空间,进入循环有创建了一个 i 的变量.

\

  此时栈空间的存放情况:

\

在这里插入图片描述
\

  add方法return结束语句,调用完毕后,出栈.

\

在这里插入图片描述

  main方法语句执行完毕,出栈.

\

在这里插入图片描述

\

  这就是一个完整的方法调用过程.

\

3. 方法调用的执行过程

\

基本规则

\

1.定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.

2.当方法被调用的时候, 会将实参赋值给形参.

3.参数传递完毕后, 就会执行到方法体代码.

4.当方法执行完毕之后(遇到 return 语句),回到方法调用位置继续往下执行.

5.一个方法可以被多次调用.

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

\

  什么实参?什么是形参?

  让我们通过下面的代码示例来认识

\

在这里插入图片描述

\

我们通过一个练习来知道传参的使用.

题目要求:用方法来交换两个整形.

我们看一下下面的代码是否正确.

\

在这里插入图片描述
\

看似过程是正确的,我们看一下编译结果.

\

在这里插入图片描述
并没有进行交换,那是为什么呢?

\

  我们知道,我们传的是实参的值,但是形参只是实参的一份拷贝,所以在swap方法中,我们只是交换的是 x,y 这两个形参的值,swap方法调用完毕后两个形参的值自动被销毁,所以实参的值不变.

\

  在C语言中,我们要想通过函数来交换两个整形的值,需要进行&其地址操作

\

  但是我们明确说明:

\

1.Java中 没有&取地址符号

2.Java当中 栈上的内存地址是无法取到的

3.Java中方法传参只能进行值传参,不能像C语言进行址传参.

\

  那么在Java中如何实现传地址操作呢?

  答案是传引用,只要是引用类型就可以,类、接口、抽象类、枚举、String、数组等…

  具体使用我们会在之后更新的博客中继续提到.

\

传参时实参与形参的注意事项

在这里插入图片描述
如上图所示:

1.参数的个数、类型、顺序都要一 一匹配.

2.方法的返回值类型与接受类型也要一 一对应.

\

二. 方法的重载

\

  有些时候我们需要用一个函数同时兼容多种参数的情况, 我们就可以使用到方法重载.

\

1. 重载要解决的问题

\

在这里插入图片描述
\

  我们希望在向add方法传入两个double 类型的变量,实现浮点数的加法.

  但是编译结果:

在这里插入图片描述
\

  我们只能将代码修改为

\

在这里插入图片描述
\

  这两个方法实现的都是同一种功能,将两个数据进行加法运算.我们对不同的数据还得创建不同类型的函数,这样是不是过于麻烦,所以在Java中就有了方法重载的概念:用一个函数同时兼容多种参数.

\

2. 使用重载

\

  还是对于上面的代码进行修改:

\

在这里插入图片描述
\

  方法的名字都叫 add. 但是有的 add 是计算 int 相加, 有的是 double 相加; 甚至有的计算两个数字相加, 有的还可以是计算三个数字相加.

\

  同一个方法名字, 提供不同版本的实现, 称为 方法重载

\

3. 重载的规则

\

规则

在这里插入图片描述
\

看下面两个代码:

在这里插入图片描述

  通过这两个代码的例子,我们可以知道在Java编辑器看来,sum 的两个方法仍然是两个相同的方法,因为其参数列表相同.所以会进行报错,所以返回值对方法的重载没有影响.

\

三、方法递归

\

1.递归的概念

\

  一个方法在执行过程中调用自身, 就称为 “递归”.

  递归相当于数学上的 “数学归纳法”, 有一个起始条件, 然后有一个递推公式.

  递归的注意点:

在这里插入图片描述

1.程序调用自己

2.这个递归程序一定要有一个趋近于中止的条件.

3.核心:写递归程序的时候,需要自己来推导一个递推公式.

\

例:

我们求 N!

起始条件: N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束条件.

递归公式: 求 N! , 直接不好求, 可以把问题转换成 N! => N * (N-1)!

代码实现:

\

import java.util.Scanner;

 public static int fac(int n){
        if(n==1){
            return 1;
        }
        return n*fac(n-1);

    }

    public static void main5(String[] args){
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int ret = fac(N);
        System.out.println(ret);

    }

\

2.递归执行过程分析

\

  递归的程序的执行过程不太容易理解, 要想理解清楚递归, 必须先理解清楚 “方法的执行过程”, 尤其是 “方法执行结束之后, 回到调用位置继续往下执行”.

\

3.方法递归练习

\

  见博客——Java 方法 递归使用及练习

\

  好了,这次Java基础语法——方法使用的知识就分享到这里结束了,希望大家能够多多练习,熟悉知识,提升自己.最后感谢大家的欣赏与关注!!!



\

谢谢欣赏!!!


\

完!