栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中方法的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中方法的使用

目录

一、方法的基本语法

方法的定义:

方法的调用:

实参与形参的关系

二、方法的重载

三、方法的递归


上节我们讲了Java的逻辑控制,而方法又是什么呢?

方法就是一个代码片段。 类似于 C 语言中的  “ 函数”。 方法的好处有——能让我们对代码的理解更进一步;能让代码被重复利用,效率大大提升了。

一、方法的基本语法

方法的定义: public static 方法返回值 方法名称( 参数类型 形参  ){                     方法体代码 ;                     return 返回值 ;  }

方法的调用: 返回值变量 = 方法名称 ( 实参 ...);

 

例:用方法计算两个数相加。

运行结果如下:

 

 注意:

1、方法定义时 , 返回值也可以没有 , 如果没有返回值 , 则返回值类型应写成 void。 2、方法定义时的参数称为 " 形参 ", 方法调用时的参数称为 " 实参 "。 3、 方法的定义必须在类之中 , 代码书写在调用位置的上方或者下方均可。Java中没有函数声明的概念。

 

再来个复杂一点的例子:用方法实现 1! + 2! + 3! + 4! + 5! 的计算。

class testdemo {
        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+"的阶乘");
            int result = 1;
            for (int i = 1; i <= n; i++) {
                result *= i;
            }
            return result;
        }
    }


//运行结果

计算1的阶乘
计算2的阶乘
计算3的阶乘
计算4的阶乘
计算5的阶乘
sum = 153

 由上述例子可见,通过 factor()方法求出每个 i 的阶乘,再返回主方法中用 for 循环累加,即可得出最终结果。

实参与形参的关系

说到它们的关系,我们先来看一道例题。

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 = 20

为什么这个结果还是a=10,b=20呢?他们不是在swap中交换了吗?

答案是No!这个代码其实并没有完成数据的交换,对于基础类型来说, 形参相当于实参的拷贝。即 为传值调用。并且实参→形参是单向传递的,即实参传递给形参后,形参在函数中交换了值,但是这个函数没有返回值,形参交换完这个方法就结束了。但是实参的值并没有改变。

如果要真正做到交换,要传引用类型参数。等到数组后再分析这种情况。

二、方法的重载 有些时候我们需要用一个函数同时兼容多种参数的情况 , 我们就可以使用到方法重载。

重载满足几个条件:

1、方法名相同。 2、方法的参数不同 ( 参数个数或者参数类型 )。【两者有其一是最低要求】 3、方法的返回值类型不影响重载(即当两个方法的名字相同 , 参数也相同 , 但是返回值不同的时候 , 不构成重载。) 例:使用方法的重载打印出两个整型数相加、两个浮点型数相加、三个浮点型数相加的结果。
class Test {
 public static void main(String[] args) {
     int a = 10;
     int b = 20;
     int ret = add(a, b);
     System.out.println("ret = " + ret);

     double a2 = 10.5;
     double b2 = 20.5;
     double ret2 = add(a2, b2);
     System.out.println("ret2 = " + ret2);

     double a3 = 10.5;
     double b3 = 10.5;
     double c3 = 20.5;
     double ret3 = add(a3, b3, c3);
     System.out.println("ret3 = " + ret3);
 }


 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;
 }
}

三、方法的递归 一个方法在执行过程中调用自身 , 就称为 " 递归 "。 递归相当于数学上的 " 数学归纳法 ", 有一个起始条件 , 然后有一个递推公式。 递归只要理解原理就很好掌握。 直接上例子: 例1、 按顺序打印一个数字的每一位 ( 例如 1234 打印出 1  换行  2  换行 3 换行  4)
class Test {
        public static void main(String[] args) {
            print(1234);
        }
         public static void print(int num) {
           if (num > 9) {
           print(num / 10);
     }
           System.out.println(num % 10);
  }
}

//运行结果
1
2
3
4

一定有同学看得一头雾水,想到我开始也是,画个图会更好理解。

递归递归,说到底有“递”和“归”两次执行,如上图,红线标注的为“递”的过程,蓝线标注的为“归”的过程。

 再来个经典例子,求斐波那契数列(只写方法):

最常见也最好理解的方法就是递归版本的——

public static int fib(int n) { 
     if (n == 1 || n == 2) { 
     return 1; 
 } 
     return fib(n - 1) + fib(n - 2); 
}

但是这有个很严重的弊端,就是当你要求的数稍大一点的时候,程序进行了大量重复的运算,极大程度降低了程序的效率。因此我们求斐波那契基本不使用递归版本的,我们会选择使用循环来优化这个算法——

public static int fib(int n) { 
  if(n==1||n==2){
    return 1;
  }
   int f1 = 1; 
   int f2 = 1; 
   int f3 = 0; 
   for (int i = 3; i <= n; i++) { 
   f3 = f1 + f2; 
   f2 = f1; 
   f1 = f3; 
 } 
   return f3; 
}

解释一下这种方法:

我们定义斐波那契数列的第一项为f1,第二项为f2,第三项为f3。此时使用循环,第三项为第一项与第二项之和,然后让f1变成第二项,f2变成第三项,这样当 i 为4时,f3也通过前两项相加变成了第四项的值...以此类推,可以得出 f3 的值就是我们所传入的、所求的 第 n 项斐波那契数的值。

递归的题太多啦,就不一一列举了。包括很经典的汉诺塔,青蛙跳台阶等问题,网上讲都很详细了,暂时就不一一列举了,咱们下节数组见!!

to be continue →

欢迎大家互相探讨交流补充 欢迎捉虫!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354267.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号