Java中方法的基本用法、重载和递归
1. 方法的基本用法
1.1 什么是方法(method)
方法就是一个代码片段. 类似于 C 语言中的 “函数”.
方法存在的意义
1.是能够模块化的组织代码(当代码规模比较复杂的时候)。
2.做到代码被重复使用, 一份代码可以在多个位置使用。
3.让代码更好理解更简单。
4.直接调用现有方法开发, 不必重复造轮子。
1.2 方法定义语法
// 方法定义 public static 方法返回值 方法名称([参数类型 形参 ...]){ 方法体代码; [return 返回值]; } // 方法调用 返回值变量 = 方法名称(实参...);
实现一个方法实现两个整数相加
class Test { public static void main(String[] args) { int a = 10; int b = 20; // 方法的调用 int ret = add(a, b); System.out.println("ret = " + ret); } // 方法的定义 public static int add(int x, int y) { return x + y; } } // 执行结果 ret = 30
1.3 方法调用的执行过程
基本规则
1.定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.
2.当方法被调用的时候, 会将实参赋值给形参.
3.参数传递完毕后, 就会执行到方法体代码.
4.当方法执行完毕之后(遇到 return 语句), 就执行完毕, 回到方法调用位置继续往下执行.
5.一个方法可以被多次调用.
计算 1! + 2! + 3! + 4! + 5
class Test { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 5; i++) { sum += factor(i); } System.out.println("sum = " + sum); } public static int factor(int n) { System.out.println("计算 n 的阶乘中! n = " + n); int result = 1; for (int i = 1; i <= n; i++) { result *= i; } return result; } }
1.4 实参和形参的关系
交换两个整形变量
class Test { public static void main(String[] args) { int a = 10; int b = 20; swap(a, b); System.out.println("a = " + a + " b = " + b); } public static void swap(int x, int y) { int tmp = x; x = y; y = tmp; } } // 运行结果 a = 10 b = 2
实参-----》形参传值的时候,一定要个数,类型都要匹配。
在方法的内部,不能嵌套方法,只能调用方法。
方法名采用小驼峰的方式 例如 :numberName();
实参给形参传值的方式有几种?
C:按值传递 按址传递
Java:按值传递 传引用———》引用也是值
特点: 形参的改变 并不会影响 实参的值
1.5 没有返回值的方法
方法的返回值是可选的. 有些时候可以没有
class Test { public static void main(String[] args) { int a = 10; int b = 20; print(a, b); } public static void print(int x, int y) { System.out.println("x = " + x + " y = " + y); } }
另外, 如刚才的交换两个整数的方法, 就是没有返回值的.
2. 方法的重载
有些时候我们需要用一个函数同时兼容多种参数的情况, 我们就可以使用到方法重载
针对同一个类:
方法名相同
方法的参数不同(参数个数或者参数类型)
方法的返回值类型不影响重载.
class Test { public static void main(String[] args) { int a = 10; int b = 20; int ret = add(a, b); System.out.println("ret = " + ret); } public static int add(int x, int y) { return x + y; } public static double add(int x, int y) { return x + y; } } // 编译出错 Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int) public static double add(int x, int y) { ^ 1 个错误
当两个方法的名字相同, 参数也相同, 但是返回值不同的时候, 不构成重载.
3. 方法递归
一个方法在执行过程中调用自身, 就称为 “递归”。
递归相当于数学上的 “数学归纳法”, 有一个起始条件, 然后有一个递推公式.
例如, 我们求 N! 起始条件: N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束条件.
递归公式: 求 N! , 直接不好求, 可以把问题转换成 N! => N * (N-1)!
递归求 N 的阶乘
import java.util.Scanner; public class Lzc{ public static int zed(int n){ if(n == 1){ return 1; } return n *zed(n - 1); } public static void main (String[] args){ System.out.println("请输入n的值:"); Scanner scan = new Scanner(System.in); int n = scan.nextInt(); System.out.println(zed(n)); } }
递归求 1 + 2 + 3 + … + 10
public static int yasuo(int n){ if (n == 1){ return 1; } return n + yasuo(n - 1); } public static void main(String[] args){ System.out.println(yasuo(10)); }
求斐波那契数列的第 N 项
public static int feibonaco(int n){ if (n ==1 || n == 2){ return 1; }else{ return feibonaco(n - 1) + feibonaco(n - 2); } } public static void main(String[] args){ System.out.println("请输入斐波那契数列的第n项:"); Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int num = feibonaco(n); System.out.println(num); }
递归小结
递归是一种重要的编程解决问题的方式.
有些问题天然就是使用递归方式定义的(例如斐波那契数列, 二叉树等), 此时使用递归就很容易解
有些问题使用递归和使用非递归(循环)都可以解决. 那么此时更推荐使用循环, 相比于递归, 非递归程序更加高效.
- 点赞
- 收藏
- 分享
- 文章举报
- Java基础知识(程序类型、基本数据类型、方法、重载、构造方法、静态成员、垃圾收集、递归 概要)
- java中关于方法重载和renturn用法
- java方法重载与递归调用
- javaSE_05Java中方法(函数)与重载、递归-练习
- Java连载30-方法重载、方法递归
- Java 小细节——方法基本类型参数的重载
- 十天学完java基础-方法重载和递归调用
- Java方法创建和重载、递归调用
- Java基础学习笔记 -- 11(方法、重载、递归)
- Java学习笔记(温故知新)2——方法、方法的重载、递归结构、new对象(实例化对象)
- Javad 方法,方法的重载,递归,类,类的构造方法
- java中方法的定义、重载、递归调用
- java中方法的定义和重载、简单递归
- Java中的getGenericSuperclass方法的基本用法
- Java 多线程CountDownLatch、CyclicBarrier、Thread.join方法基本用法
- java基础——涉及基本类型的方法重载
- javaSE_05Java中方法(函数)与重载、递归
- 2.Java中涉及基本数据类型的方法重载
- Java基础10-方法的重载与递归
- Thinking in java 基本类型方法重载