方法的基本用法

本文深入解析了Java中的方法概念,包括方法的定义、调用、重载及递归使用。通过实例详细介绍了方法如何实现代码复用,提升代码的模块化和易读性。对比了递归与非递归实现斐波那契数列的效率,强调了适当选择算法的重要性。

1.1方法:实际上是一块代码片段,类似于c语言中的"函数".
在书写代码时使用方法的意义:
a.实现代码的复用,即一份代码可以在多个位置使用;
b.使代码简单易懂;
c.能够模块化的组织代码.

1.2方法定义语法:

//方法定义
public static 方法返回值 方法名称(参数类型 形参……){
方法体;
return 放回值;
}
//方法调用
返回值变量 = 方法名(实参……);

应用实例:

public class Test{
public static void main(String[] args){
int ret;
ret = add(1,2);  //方法调用
System.out.println(ret);
}
//方法的定义
public static int add(int x, int y){  
return x + y;
}
}

注意:
a.与c语言不同的是在java中没有"函数声明"这一概念;
b.方法可以没有参数,即参数列表可以为空;
c.方法可以没有返回值,在定义方法是将其返回值类型设为void,如上应用实例中的main方法;
d.方法既可以书写在调用位置的上方,也可以书写在调用位置的下方.

1.3方法的调用过程:
方法只有在被调用的时候才会执行,当代码被调用时,会将实参赋值给形参,参数传递完毕后,就会执行该方法体的代码,执行完毕后返回调用他的位置继续向下执行.
一个方法可以多次被调用:

public class Test{
public static void main(String[] args){
int ret;
ret = add(2,3);  //调用add方法
System.out.println("第一次调用方法 ret ="+ret);
ret = add(3,4);
System.out.println("第二次调用方法 ret ="+ret);
}
//定义add方法
public static int add(int x ,int y){
return x + y;
}
}

2.1方法重载:
方法重载是指多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同.返回类型不能用来区分重载的方法.
a.Java的方法重载要求同名的方法必须有不同的参数表,仅有返回类型不同是不足以区分两个重载发方法的.
b.参数类型的区分度一定要足够,即参数类型,个数,顺序至少有一项不相同.
c.方法的修饰符可以不同.
应用实例:

public class Test{
public static void main(String[] args){
int a;
double b,c;
a = add(1,2);  //调用返回值是int型,且有两个参数是int型方法
System.out.println(a);  //输出3
b = add(2,3);   //调用返回值是double型,且有两个参数是double型方法
System.out.println(b);  //输出5.0
c = add(3,4,5);   //调用返回值是double型,且有三个参数是double型方法
System.out.println(c);  //输出12.0
}
public static int add(int x,int y){
return x + y;
}
public static double add(double x ,double y){
return x + y;
}
public static double add(double x ,double y,double z){
return x + y + z;
}
}

3.1方法递归
方法递归是指一个方法在执行过程调用自身.
应用实例:
求5的阶乘:

public class Test{
public static void main(String[] args){
int n = 5;
System.out.println(factorial(5));  //调用递归求阶乘的方法,输出结果为120
}
//递归求阶乘的方法
public static int factorial(int n){
if (n == 1){
return 1;
}
return n * factorial(n - 1);  //递归调用自身
}
}

递归的过程如下:
先将参数向下递直到递归边界:

  1. return 5 * factorial(4);
  2. return 4 * factorial(3);
  3. return 3 * factorial(2);
  4. return 2 * factorial(1);
  5. return 1.
    遇到递归边界后,将返回方法的返回值:
    6.return 1;
    7.return 2 * 1;
    8.return 3 * 2;
    9.return 4 * 6;
    10.return 5 * 24.
    即方法的最终返回值为120.
    对于可以不用递归解决的问题最好不用递归,这样可以提高效率.如下实例:
    求第N个斐波那契数:
    递归实现:
import java.util.Scanner;
public class Test {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.println("请输入您想要的第N个斐波那契数中的N:");
        int n = in.nextInt();  //接收一个正整数
        System.out.println(fibonacci(n));  //调用找第N个斐波那契数方法
    }
    //找第N个斐波那契数方法
    public static long fibonacci(int n){
        if (n == 1 || n == 2){ //递归边界
            return 1;
        }
        return fibonacci(n - 1) + fibonacci(n - 2);  //递归调用方法自身
    }
}

非递归实现:

import java.util.Scanner;
public class Test {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.println("请输入您想要的第N个斐波那契数中的N:");
        int n = in.nextInt();  //接收一个正整数
        System.out.println(noRecursionFibonacci(n));  //调用找第N个斐波那契数方法
    }
    //找第N个斐波那契数方法
    public static long noRecursionFibonacci(int n){
        long f1 = 1;  //第一项斐波那契数
        long f2 = 1;  //第二项斐波那契数
        if (n == 0){  
            return 0;
        }
        while (n > 2){  //从3项开始计算斐波那契数
            f2 = f1 + f2;  //某一项的斐波那契数是其前两项斐波那契数的和
            f1 = f2 - f1;  //f1的值更新为该项斐波那契数的前一项斐波那契数的值
            n--;  //斐波那契数从第3项开始逐步向第n项靠近
        }
        return f2;  //反回要找的第n项斐波那契数
    }
}

当n越大时,越能感觉到非递归实现的方法比递归实现的方法执行效率更高,这是因为递归过程中存在着大量的重复计算.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值