方法的定义
设计方法的原则:方法的本意是功能块,就是实现某个功能的语句的集合。我们设计的时候,最好保持方法的原子性,就是一个方法完成以一个功能,这样又利用我们后期的扩展。
方法包含一个方法头和一个方法体。下面是方法的所有部分:
- 修饰符:这是可选的,告诉编译器如何调用该方法。定义了方法的访问类型,如加了static就可以直接调用
- 返回值类型:returnValueType是方法返回值的数据类型。有些无返回值的方法的关键字是void
- 方法名: 方法名和参数共同构成方法签名。
- 参数类型: 参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型,顺序和参数的个数。参数也是可选的。 参数分为形式参数和实参.
- 方法体:方法体包含具体的语句,定义该方法的功能。
定义一个无参无返回值的方法
public void add(){
System.out.println("hello world!");
}
定义一个无返回值有参数的方法
public void add(int a,int b){
System.out.println(a+b);
System.out.println("hello world!");
}
定义一个有返回值的有参方法
public int add(int a,int b){
return a+b;
}
定义一个类方法
public static double add(double a,double b) {
return a+b;
}
调用类方法的方式:
public class Demo05 {
public static void main(String[] args) {
double add = add(3, 5);//直接 方法名();调用
System.out.println(add);
}
方法的重载
定义:重载就是在一个类中,有相同的函数名称,但形参不同的函数
方法的钟重载的规则:
- 方法名称必须相同。
- 形参列表必须不同(个数不同、或类型不同、参数排列顺序不同)。
- 方法的返回类型可以相同也可以不同
- 仅仅返回类型不同不足以成为方法的重载
public void add(int a,int,b){
}
//形参的数量不同:
public void add(int a ,int b,int c){}
//排列顺序不同:
public void add(int b,int a,int c){}
//形参的数据类型不同
public void add(double a,char b){}
可变参数
当我们在用方法的重载来进行传递参数的时候发现,如果要传递的参数的数量比较多,那么就需要给方法加上很多形参,在这种情况下,我们就可以使用可变参数
声明的方式:在指定参数类型后面假一个省略号(…)。
public class Demo02 {
public static void main(String[] args) {
new Demo02().test(10,20,30,3);
}
public void test(int a,int... i){
for (int x=0;x<i.length;x++){
System.out.println("a="+a+" "+"i[x]="+i[x]);
}
}
}
输出结果如下
注意点: 一个方法中只能指定一个可变参数,并且它必须时方法的最后一个参数。任何普通的参数必须在它前面
递归(⭐)
解决一些小基数的运算,如果基数较大,不建议使用递归,导数运行速度变慢,还有可能导致栈溢出。
public class Demo03 {
public static void main(String[] args) {
System.out.println(new Demo03().f(5));
}
public int f(int n){
if(n==1){
return 1;
}else {
return n*f(n-1);//调用自己,首相n进来函数内走else,n*f(n-1)-> n-1在进函数内走else,相当于变成了n*(n-1*f(n-2));直到n=1;实现了递归:n!这里的f(1)就是递归头
//f(n-1)就是递归体
}
}
}
//递归头:什么时候不调用自己就是递归头,如果没有头,将陷入死循环
//递归体:就时什么时候调用自己