Java中方法的使用
一.方法的基本使用
1.方法的概念
方法类似于C语言的“函数”,可以把方法/函数理解为一个功能,且这个功能可以重复使用的
2.方法的基本语法
// 方法定义
public static 方法返回值 方法名称(形式参数列表){
//方法体代码;
}
// 方法调用
返回值 变量名 = 方法名称(实际参数);
注意:
(1)函数的名字最好用小驼峰命名法;
(2)定义方法的时候,每个参数要指定类型,也可以没有参数;
(3)定义方法的时候,可以没有返回值,如果没有返回值的话,则返回值类型应写成void;
(4)方法定义的参数称为“形参”,方法调用的参数称为“实参”;
(5)方法的定义必须在类之中,但是代码的书写不需要一定在调用位置的上方,也可以在下方定义方法;
(6)调用方法的时候不用进行“函数声明”。
3.实参与形参的关系
举个例子:
public class TestDemo {
public static void swap(int x,int y){
int tmp = x;
x = y;
y = tmp;
}
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("交换实参前:" + a + " " + b);
swap(a, b);
System.out.println("交换实参后:" + a + " " + b);
}
}
执行后的结果为:
我们可以发现 a 和 b 并没有完成交换,因为对于基本类型来说,形参相当于实参的拷贝,即是传值调用。
int a = 10;
int b = 20;
int x = a;
int y = b;
int tmp = x;
x = y;
y = tmp;
在Java里面我们是取不到栈上的地址的,如果要解决这个问题我们只能把 a b 的值放在堆上,放在堆上的都是对象,所以有一个解决方式就是采用数组。
二.方法的重载
1.为什么要使用重载
当我们需要用一个函数同时兼容多种类型参数的时候,我们就可以使用到方法重载
可能我们会想为什么不创建像addInt、addDouble等些函数来分别定义方法,但是即使这种写法是对的,但是Java认为这种写法不友好,所以就有了重载的概念
2.重载的规则
要求方法名相同,但是方法的参数不同(参数个数或者参数的类型),其中方法的返回值类型并不会影响重载。
代码示例:
public class TestDemo {
public static void main(String[] args) {
int a1 = 10;
int b1 = 20;
int c1 = 30;
System.out.println(add(a1,b1));
System.out.println(add(a1,b1,c1));
double a2 = 5.3;
double b2 = 6.4;
System.out.println(add(a2,b2));
}
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static int add(int x, int y, int z){
return x + y + z;
}
}
三.方法的递归
1.递归的概念
一个方法自己来调用自己,这就是递归。
递归的重要思想就是把重复复杂的问题简单化
递归的实现:要有一个终止条件和一个递推公式(递归难就难在如何快速找到递归公式)。
2.举例来分析递归的执行过程
举一个例子来分析下递归的过程:
比如我们要求5!的阶乘
根据上述的图可以知道递推公式为:n*( n - 1 )
且终止条件为n = 1的时候返回1
代码如下
public class TestDemo {
public static void main(String[] args) {
int n = 5;
System.out.println(factor(n));
}
public static int factor(int n){
//n = 1为终止条件
if(n == 1) {
return 1;
}
//递推公式
int tmp = n * factor(n-1);
return tmp;
}
}
下面来看一下代码的执行过程
3.递归的总结
(1)递归是一种重要的编程思想,使用递归的时候不要纵向思考,需要我们学会横向思考问题,递归就是为了简化复杂代码的,不要想着根据规律来展开所有的代码,如果想着要展开所有代码的话就又把问题更加复杂化了;
(2)因为递归的效率一般会比迭代(循环)低,所以在考虑问题的时候,如果递归和非递归都可以解决的话,更推荐使用非递归,也就是迭代的方法解决。