方法的使用

简介: 方法的使用

一、方法概念及使用

       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. }

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

完!

相关文章
|
1月前
|
敏捷开发 安全 Java
论软件维护方法及其应用
【11月更文挑战第16天】在软件开发的整个生命周期中,软件维护阶段占据了超过60%的时间。本文旨在深入探讨软件维护方法及其应用,通过笔者参与的一个实际Java项目为例,详细阐述软件维护的重要性、影响因素以及具体实践。
45 1
|
Java 编译器 C语言
方法的使用
方法的使用
130 0
方法的使用
|
存储 JavaScript 前端开发
JavaScript继承的几种方法
JavaScript继承的几种方法
145 0
JavaScript继承的几种方法
|
机器学习/深度学习
基于2D标靶的摄像机标定方法
基于2D标靶的摄像机标定方法
|
Python 容器
强大的 accessor 方法
强大的 accessor 方法
|
存储 算法 搜索推荐
常用的外部排序方法
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/81158566 定义问题       外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。
1856 0
|
程序员 架构师