前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Java SE】方法的使用

【Java SE】方法的使用

作者头像
xxxflower
发布2023-04-16 17:33:35
发布2023-04-16 17:33:35
31800
代码可运行
举报
文章被收录于专栏:《数据结构》《数据结构》
运行总次数:0
代码可运行

1.方法概念及使用

1.1方法(method)

方法就是一个代码片段. 类似于 C 语言中的 “函数”。

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

1.2方法的定义

代码语言:javascript
代码运行次数:0
运行
复制
// 方法定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}

注意事项

  1. 修饰符:现阶段直接使用public static 固定搭配
  2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void
  3. 方法名字:采用小驼峰命名
  4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
  5. 方法体:方法内部要执行的语句
  6. 在java当中,方法必须写在类当中
  7. 在java当中,方法不能嵌套定义
  8. 在java当中,没有方法声明一说

1.3方法调用的执行过程

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

例1:: 计算 1! + 2! + 3! + 4! + 5!

1.4 ⭐实参和形参的关系

实参的值永远都是拷贝到形参中,形参和实参本质是两个实体,故改变形参实参不会随之改变。那么就有同学会问,Java没有C语言中的地址,那么它是如何改变的呢?这就要说到另一个知识点“引用”了,具体我们以后再学。 对于基础类型来说, 形参相当于实参的拷贝. 即 传值调用

1.5没有返回值的方法

方法的返回值是可选的. 有些时候可以没有的,没有时返回值类型必须写成void

2.方法重载

2.1 方法重载概念

在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。 注意:

  1. 方法名必须相同
  2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
  3. 与返回值类型是否相同无关

2.2方法签名

方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。

3.递归

一个方法在执行过程中调用自身, 就称为 “递归”. 递归的必要条件:

  1. 将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同
  2. 递归出口 递归重要的是结束条件和递归表达式! 例1:求1234各项之和

例2:打印1234 各项

例3:求斐波那契数列的第n项 方法一:迭代实现

方法2:递归实现

但是循环的效率远大于递归!

递归经典:汉诺塔

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。【百度百科】

由以上可得每移动n个需要(2^n)-1步骤。

我们可以发现,要想移动所有的盘子,可以逆着思路推理。终止条件是将最底下一个盘子从起始位置移动到目标位置。而上面n-1个盘子是可以借助目标位置先放在中转位置上面。再将最下面一个盘子放在目标位置上,然后将n-1个盘子借助起始位置放在目标位置上。如此递归下去…

于是我们可以写出以下代码:

运行一下:(3的情况)

可以对比我们刚才推理的结果,答案是一样的。

代码语言:javascript
代码运行次数:0
运行
复制
/**
     * pos1 起始位置
     * pos2 中转位置
     * pos3 目标位置
     */
    public static void hanio(int n,char pos1,char pos2,char pos3){
    if (n == 1){
        move(pos1,pos3);//最后一步都是把最底下的盘子从起始位置(pos1)转移到目标位置(pos3)
        return;
    }
    hanio(n-1,pos1,pos3,pos2);//将n-1个盘子从起始位置(pos1)借助中转位置(pos3)移动到目标位置(pos2)
    move(pos1,pos3);//把最底下的盘子从起始位置移到目标位置
    hanio(n-1,pos2,pos1,pos3);//将n-1个盘子从起始位置(pos2)借助中转位置(pos1)移动到目标位置(pos3)
    }

    /**
     *
     * @param pos1 起始位置
     * @param pos2 目标位置
     */
    public static void move(char pos1,char pos2){
        System.out.print(pos1+"->"+pos2+" ");//模拟鼠标实现
    }

    public static void main(String[] args) {
        hanio(3,'A','B','C');
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.方法概念及使用
    • 1.1方法(method)
    • 1.2方法的定义
    • 1.3方法调用的执行过程
    • 1.4 ⭐实参和形参的关系
    • 1.5没有返回值的方法
  • 2.方法重载
    • 2.1 方法重载概念
    • 2.2方法签名
  • 3.递归
    • 递归经典:汉诺塔
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档