方法的使用

简介: 方法的使用

一、方法概念及使用

       1.1 什么是方法

       大家都应该都或多或少的接触过C语言,在C语言中要实现两数相加,我们可以写一个Add函数,在Java中,我们可以把这个函数理解为方法,调用函数就是调用方法。以下是方法存在的意义:

       1. 是能够模块化的组织代码(当代码规模比较复杂的时候)。

        2. 做到代码被重复使用, 一份代码可以在多个位置使用。

        3. 让代码更好理解更简单

        4. 直接调用现有方法开发, 不必重复造轮子

        1.2 方法的定义

1. // 方法定义
2. 修饰符 返回值类型 方法名称([参数类型 形参 ...]){
3. 方法体代码;
4. [return 返回值];
5. }

       咱们来一个例子体验一下:

       实现一个两个整数相加的方法:

1. public class Method{
2. // 方法的定义
3. public static int add(int x, int y) {
4. return x + y;
5. }
6. }

       注意:1. 修饰符:现阶段直接使用public static 固定搭配

       2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成 void

       3. 方法名字:采用小驼峰命名

       4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开

       5. 方法体:方法内部要执行的语句

       6. 在java当中,方法必须写在类当中

       7. 在java当中,方法不能嵌套定义

        8. 在java当中,没有方法声明一说

       1.3 方法调用的执行过程

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

       大家可这样理解:Java是面向对象编程,不必像C语言一样关注底层。调用方法过程,可想象办事情:首先,找到受理机构,找到其中处理的部门,递交材料,该部门会进行审批什么的,不用你关心,然后告知你成功不成功,然后按照事实在做行动。

       注意:定义方法的时候, 不会执行方法的代码。

       只有调用的时候才会执行。

        一个方法可以被多次调用。

      实例: 计算两个整数相加

1. public class Method {
2. public static void main(String[] args) {
3. int a = 10;
4. int b = 20;
5. System.out.println("第一次调用方法之前");
6. int ret = add(a, b);
7. System.out.println("第一次调用方法之后");
8. System.out.println("ret = " + ret);
9. System.out.println("第二次调用方法之前");
10. ret = add(30, 50);
11. System.out.println("第二次调用方法之后");
12. System.out.println("ret = " + ret);
13. }
14. public static int add(int x, int y) {
15. System.out.println("调用方法中 x = " + x + " y = " + y);
16. return x + y;
17. }
18. }
19. // 执行结果
20. 一次调用方法之前
21. 调用方法中 x = 10 y = 20
22. 第一次调用方法之后
23. ret = 30
24. 第二次调用方法之前
25. 调用方法中 x = 30 y = 50
26. 第二次调用方法之后
27. ret = 80

       1.4 形参与实参的关系

       在我们C语言过程中我们明白:形参是实参的一份临时拷贝,那么,这个结论在Java中是否适用呢?咱们使用一个例子来探究一下:

       题目:交换两个整型变量

1. public class TestMethod {
2. public static void main(String[] args) {
3. int a = 10;
4. int b = 20;
5. swap(a, b);
6. System.out.println("main: a = " + a + " b = " + b);
7. }
8. public static void swap(int x, int y) {
9. int tmp = x;
10. x = y;
11. y = tmp;
12. System.out.println("swap: x = " + x + " y = " + y);
13. }
14. }
15. // 运行结果
16. swap: x = 20 y = 10
17. main: a = 10 b = 20

       通过结论我们可以得出,同样适用,即形参是实参的一份临时拷贝。在C语言学习中,我们可以通过指针来完成,但是我们明白Java中没有指针,那么,我们该如何使用方法来完成这个代码呢?答案是:数组。代码如下:

1. public class TestMethod {
2. public static void main(String[] args) {
3. int[] arr = {10, 20};
4. swap(arr);
5. System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
6. }
7. public static void swap(int[] arr) {
8. int tmp = arr[0];
9. arr[0] = arr[1];
10. arr[1] = tmp;
11. }
12. }
13. // 运行结果
14. arr[0] = 20 arr[1] = 10

二、方法重载

       在我们学习C语言完成转移表(计算器)时,我们要写出不同名字的函数,叫人叫苦不迭,那么在Java中我们还要在经历一遍这样的痛苦吗?答案是:不需要。因为Java有一个功能叫方法重载。

       在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。请各位看如下代码:

1. public class TestMethod {
2. public static void main(String[] args) {
3.         add(1, 2); // 调用add(int, int)
4.         add(1.5, 2.5); // 调用add(double, double)
5.         add(1.5, 2.5, 3.5); // 调用add(double, double, double)
6.     }
7. public static int add(int x, int y) {
8. return x + y;
9.     }
10. public static double add(double x, double y) {
11. return x + y;
12.     }
13. public static double add(double x, double y, double z) {
14. return x + y + z;
15.     }
16. }

       在使用方法重载时注意以下几点:

       1. 方法名必须相同

       2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)

        3. 与返回值类型是否相同无关

       4.两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的

       5.编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法

       重载可这样理解:重名这件事在生活中很常见,比如:这有个张三,那有个张三,那么折磨确定你叫的就是你想叫的呢?很简单,加上特征,比如:性别(类型),如果性别一样可以说其它的 ,如:学习好的,长得高的什么的。特征要不一样,不然不仅你无法区分,编译器也无法区分。

三、递归

       想必大家对于递归都不陌生,那递归不就是:“我”调“我自己”,即一个方法在执行过程中调用自身, 就称为 "递归"。

       对于递归,大家应该能想起一个耳熟能详的故事,如下:从前有坐山,山上有座庙,庙里有个老和尚给小和尚将故事,讲的就是: "从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事,讲的就是: "从前有座山,山上有座庙..." "从前有座山……"(此段只是为了活跃气氛)

       想到这,是不是对于递归有了些许认识了呢?递归很简单,即:我调我自己。也可以理解为套娃。

       咱们来几道例题吧:

       1.按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)

1. public static void print(int num) {
2. if (num > 9) {
3.         print(num / 10);
4.     }
5.     System.out.println(num % 10);
6. }

       2.写一个递归方法,输入一个非负整数,返回组成它的数字之和. 例如,输入 1729, 则应该返回 1+7+2+9,它的和是19

1. public static int sum(int num) {
2. if (num < 10) {
3. return num;
4.     }
5. return num % 10 + sum(num / 10);
6. }

       3.求斐波那契数列的第 N 项

       斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

1. public static int fib(int n) {
2. if (n == 1 || n == 2) {
3. return 1;
4.     }
5. return fib(n - 1) + fib(n - 2);
6. }

   今天的学习到今天就结束了,如有问题可私信,也可在评论区交流。

完!

相关文章
|
7月前
|
自然语言处理 算法 数据挖掘
长绳方法
进一步提高语言模型(LLM)的性能,通过扩展其上下文窗口至超过200万个标记,从而实现更深入的语境理解。本文将对这一成果进行深入解读,探讨其意义和潜在应用。
52 2
|
3月前
|
机器学习/深度学习 自然语言处理 API
10-22|处理脏话其他方法
10-22|处理脏话其他方法
|
6月前
|
存储 缓存 Java
createTempFile方法详解
createTempFile方法详解
|
7月前
|
算法 数据安全/隐私保护
常用的有限元网格生成方法
本文介绍了三种常见的有限元网格生成方法:映射法、四(八)叉树法和Delaunay三角化法。映射法通过坐标变换将物理域映射到规则参数域,适合生成结构化和非结构化网格,但处理复杂区域时较困难。四(八)叉树法基于栅格,通过递归细分逼近边界,适用于非结构化网格,但内部和边界网格的相容剖分较复杂。Delaunay三角化法通过保证外接圆特性生成高质量网格,适用于凸区域,但在凹区域需进行边界恢复。前沿推进法则从边界开始逐步向内生成网格,边界质量好,但数据结构设计和推进规则制定有一定挑战。这些方法各有优缺点,常结合使用以优化网格剖分。
726 1
是的方法
第三份阿发顺大丰阿萨德
C#中的方法
C#中的方法
89 0
|
存储 数据处理 数据库
结构化分析方法
1.概述 结构化方法是世界上第一个软件开发方法学,用来指导从需求分析、到设计开发各个阶段该怎么样做,采用什么样的方法,产出什么样的结果,从而保证整个软件开发周期可控。
181 0
|
Java 编译器 C语言
方法的使用
方法的使用
128 0
方法的使用
|
C语言 C++
求公因数的方法(C/C++)
求公因数的方法(C/C++)
325 0
求公因数的方法(C/C++)