1. 方法的概念
2. 方法的定义
// 方法定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}
3. 方法调用的执行过程
调用过程:
代码示例:
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("第一次调用方法之前");
int ret = add(a, b);
System.out.println("第一次调用方法之后");
System.out.println("ret = " + ret);
System.out.println("第二次调用方法之前");
ret = add(30, 50);
System.out.println("第二次调用方法之后");
System.out.println("ret = " + ret);
}
public static int add(int x, int y) {
System.out.println("调用方法中 x = " + x + " y = " + y);
return x + y;
}
运行结果如下:
使用方法, 避免使用二重循环, 让代码更简单清晰 。
4. 实参与形参
在Java中,形参是在方法定义中声明的变量,用于接收调用该方法时传递进来的参数值。而实参则是在调用方法时传递给该方法的值或变量。简单来说,形参是方法定义时的参数,而实参是方法调用时的参数。
例如:
public void printString(String str) {
System.out.println(str);
}
在上述方法定义中, str
就是一个形参。当我们调用该方法时,需要传递一个字符串作为实参,例如:
printString("Hello, World!");
在上述代码中,"Hello, World!"
就是一个实参,它将被赋值给str
形参。
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("main: a = " + a + " b = " + b);
}
public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
System.out.println("swap: x = " + x + " y = " + y);
}
运行结果如下:
public static void main(String[] args) {
int[] arr = {10, 20};
swap(arr);
System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) {
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
}
运行结果如下:
5. 方法重载
5.1 概念
public static void main(String[] args) {
add(1, 2); // 调用add(int, int)
add(1.5, 2.5); // 调用add(double, double)
add(1.5, 2.5, 3.5); // 调用add(double, double, double)
}
public static int add(int x, int y) {
System.out.println("调用add(int x,int y)函数");
return x + y;
}
public static double add(double x, double y) {
System.out.println("调用add(double x,double y)函数");
return x + y;
}
public static double add(double x, double y, double z) {
System.out.println("调用add(double x,double y,double z)函数");
return x + y + z;
}
运行结果如下:
注意:
5.2 方法签名
方法签名是指一个方法的名称、参数个数、参数类型和顺序。它用于描述一个方法的特征,使得在同一个类中可以存在多个同名但参数不同的方法,从而实现重载。方法签名的格式通常为:方法全路径名+参数列表+返回值类型,构成方法完整的名字。其中,参数类型指的是方法参数的数据类型,参数名称指的是方法参数的名称。
查看方法签名的方法:
代码经过编译之后,然后使用JDK自带的javap反汇编工具查看,具体操作:
注意:
方法签名中的一些特殊符号说明:
特殊字符 | 数据类型 |
V | void |
Z | boolean |
B | byte |
C | char |
S | short |
I | int |
J | long |
F | float |
D | double |
[ |
数组
(
以
[
开头,配合其他的特殊字符,表述对应数据类型的数组,几个
[
表述几维数组
)
|
L |
引用类型,以
L
开头,以
;
结尾,中间是引用类型的全类名
|
6. 递归
6.1 递归的概念
例如, 我们求 N!起始条件(终止条件): N = 1 的时候, N! 为 1. 这个起始条件相当于递归的结束条件.递归公式: 求 N! , 直接不好求, 可以把问题转换成 N! => N * (N-1)!
6.2 递归执行过程分析
public static void main(String[] args) {
int n = 5;
int ret = factor(n);
System.out.println("ret = " + ret);
}
public static int factor(int n) {
System.out.println("函数开始, n = " + n);
if (n == 1) {
System.out.println("函数结束, n = 1 ret = 1");
return 1;
}
int ret = n * factor(n - 1);
System.out.println("函数结束, n = " + n + " ret = " + ret);
return ret;
}
运行结果如下:
6.3 递归练习
public static void main(String[] args) {
int num = 1234;
print(num);
}
public static void print(int num) {
if (num > 9) {
print(num / 10);
}
System.out.print(num % 10 + " ");
}
运行结果如下:
2. 递归求 1 + 2 + 3 + ... + 10
public static void main(String[] args) {
int num = 10;
System.out.println(sum(num));
}
public static int sum(int num) {
if (num == 1) {
return 1;
}
return num + sum(num - 1);
}
运行结果如下:
3. 输入一个非负整数,返回组成它的数字之和. 例如,输入 1729, 则应该返回1+7+2+9,它的和是19
public static void main(String[] args) {
int num = 1729;
System.out.println(sum(num));
}
public static int sum(int num) {
if (num < 10) {
return num;
}
return num % 10 + sum(num / 10);
}
运行结果如下:
本文是作者学习后的总结,如果有什么不恰当的地方,欢迎大佬指正!!!