10、方法的定义和重载和递归

方法

方法就是一段用来完成特定功能的代码片段。
??方法用于定义该类或该类的实例的行为特征和功能实现。方法是类和对象行为特征的抽象。在面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。
方法的声明格式

修饰符1,修饰符2 .. 返回值类型 方法名(形式参数列表){
??方法体;
}

  • 修饰符:修饰符不是必须的要写的,java有自己默的方法饰符号。(default)
  • 返回值:方法在执行完毕后返回给调用它的环境的数据。
  • 返回值类型:事先约定好的返回值类型。
  • 方法名:方法名是调用的时候用的,一般是用对象名调用。
  • 形式参数:在方声明的时候用于接收外界传入的数据。
  • 实参:调用方法时,实际传给方法的数据。
  • 方法体:调用方法就是执行方法体里面的内容的。

方法的定义

    /**
     * main方法也是一个方法,它是一个程序的入口
     */
    public static void main(String[] args) {
        //调用方法的时候,得先创建一个对象
        TestOne testOne = new TestOne();
        //然后用对象调用方法
        testOne.print();
        testOne.add(1, 2);
        int a = testOne.addNum(1, 2);
        System.out.println(a);  //结果为:3
    }

    //无参的方法,无返回值的方法
    void print() {
        System.out.println("这是一个无参的方法");
    }

    //有参无返回值的方法
    void add(int a, int b) {
        System.out.println(a + b);
    }

    //有参有返回值的方法
    int addNum(int a, int b) {
        return a + b;
    }

方法的重载

方法的重载就是多个方法用同一个方法名,但是方法的参数列表不相同,参数的个数,参数的顺序不相同,参数的类型不相同。只是返回不相同可不是重载。
?&esmp;方法的重载本质是两个方法本来就不是一个方法,只是名字相同罢了。

    /**
     * 原始方法 下面所有的方法名都一样。
     * 但是参数上的不同,可以非常多的重载方法。
     */
    int add(int a, int b) {
        return a + b;
    }

    //参数的个数不相同
    int add(int a, int b,int c) {
        return a + b + c;
    }

    //形参不一样
    double add(double a,int b) {
        return a + b;
    }

    //形参不一样
    double add(int a,double b) {
        return a + b;
    }

    /*
    //错误的,只有返回不相同不可以
    long add(int a, int b) {
        return a + b;
    }
    //错误的,参数名不相同也不可以
    int add(int b, int a) {
        return a + b;
    }
    */

方法的递归

递归的本质就是一个方法自己调用自己。
??但是递归是一种常见的解决问题的方法,即把问题简单化。利用递归可以用一些简单的程序来解决一些复杂的问题。
要使用递归必须要定义以下两点

1、定义递归头:就是什么时候不调用自身的方法。如果没有递归头,这个递归就是一个死循环。
2、递归体:就是什么时候需要调用自己。

只要掌握这两个的写法,就可以写好一个递归了。
下面有一个小例子来说明一下递归:(求n的乘阶)

public static void main(String[] args) {
    long time1 = System.currentTimeMillis();    //求出程序执行前的时间
    long a = sumNum(10);                //递归的方法
    long time2 = System.currentTimeMillis();    //求出程序执行后的时间
    System.out.println("递归的结果是:" + a); //递归的结果是:3628800
    System.out.println("花费的时间是:" + (time1 - time2));//花费的时间是:1

    System.out.println("*************************");

    long time3 = System.currentTimeMillis();    //求出程序执行前的时间
    long b = sumNum2(10);                //循环的方法
    long time4 = System.currentTimeMillis();    //求出程序执行后的时间
    System.out.println("循环的结果是:" + a); //递归的结果是:3628800
    System.out.println("花费的时间是:" + (time3 - time4));//花费的时间是:0
}

//用递归求n的乘阶
static long sumNum(int n) {
    if (n == 1) {   //递归头
        return 1;
    } else {        //递归体
        return n * sumNum(n - 1);
    }
}

//用循环求n的乘阶
static long sumNum2(int n) {
    int result = 1; //接收计算结果
    while(n>1) {
        result *= n*(n-1);  //实现计算结果的累乘操作
        n -= 2; //每次减去2,实现数字的迭代操作
    }
    return result;
}


??上面这张图片说明了,递归是一个方法套一个方,然后从递归头结束,再进行返回,所以说执行的速度比循环慢。
??这两个例子表明,递归还是不如循环好使,因为大部分递归可以实现的东西,循环都可以实现,并且比递归还要好理解,并且不占内存,不会报无缘无故的错,并且循环执行的时间比递归的时间执行的时间少。
??但是并不是全都不使用递归了,该用的地方还是会用递归的,但是常用的方法,我们还是用循环解决吧!


细节决定成败!

个人愚见,如有不对,恳请扶正!

原文地址:https://www.cnblogs.com/xdtg/p/12339923.html

时间: 2024-08-30 01:37:53

10、方法的定义和重载和递归的相关文章

方法的创建、重载及递归调用

-----------siwuxie095 1.方法的定义 方法就是一段可重复调用的代码段 定义格式: 「方法的返回值类型为 void 时,不需要返回值,小括号 () 里可以有参数」 2.方法的重载: 方法名称相同,但是参数的类型和个数不同(即参数可辨), 通过传递参数的个数和类型不同来完成不同的功能 调用时系统自动匹配 3.方法的递归调用 递归调用是一种特殊的调用形式,就是方法自己调自己 常用于遍历(如:文件夹等) 如:从 1 加到 100 代码: package com.siwuxie095

数组的使用、eclipse调试程序、练习小demo以及方法的定义和重载

编程练习优化 package com.imooc; import java.util.Scanner; /* * 功能:为指定的成绩加分,直至分数大于等于60分为止 * 输出加分前后的成绩,并且统计加分次数 * 步骤: * 1.定义一个变量,用来保存加分的次数 * 2.使用循环为成绩加分 * 3.每次执行循环加分操作,加1分,并且统计加分的次数 * 使用Scanner工具类来获取用户输入的成绩信息 * Scanner类位于java.util包中,使用时需要导入此包 * 步骤: * 1.导入jav

Java基础学习笔记 -- 11(方法、重载、递归)

1. 方法 1)方法作用: 封装一段特定的逻辑功能 ,使程序结构清晰.便于代码的重复使用 2)方法的定义: 方法的主要三要素:方法名.参数列表.返回值. 修饰词  返回值类型  方法名( 参数列表 ) { 方法体 } 说明: ① 返回值类型: 方法需返回结果时使用,无返回值为void,有返回值时设计为特定数据类型即可 . ② 参数列表:参数的设计,使方法处理更灵活,参数根据需求是可有可无的. 3)方法的调用: 根据有无返回值或者是有无参数,以及调用情况,有以下的调用方法 ① 方法名(); ② 方

override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 overload(重载,过载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能重载只有返回值不同的方法名。 3、存在于父类和子

override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常). 4.存在于父类和子类之间. 5.方法被定义为final不能被重写. overload(重载,过载) 1.参数类型.个数.顺序至少有一个不相同.   2.不能重载只有返回值不同的方法名. 3.存在于父类和子类.同类中. 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现. 重写(O

在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

//在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’:输出这个数组中的所有元素. char [][]y=new char [10][10]; for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(i==j||i+j==9) { y[i][j]='*'; } else { y[i][j]='#'; } } } for(int i =0;i<10;i++) { for(int k

第2.6章:方法的定义与使用

方法的基本概念 方法的主要功能是封装可以执行的一段代码,这样不仅可以进行重复调用,更可以方便的实现代码的维护,而本次使用的方法定义语法如下所示. public static 返回值类型 方法名称(参数类型 参数变量, ...) { 方法体(本方法要执行的若干操作) ; [return [返回值] ;] } 在本定义格式之中,发现方法有一个返回值类型,指的是这个方法返回结果,对于此类的类型可以有两种: 直接设置Java中的数据类型(基本数据类型.引用数据类型), 如果方法设置了返回值,那么必须使用

java中方法的定义

java中方法的定义: [修饰符]   [修饰符]   [返回值类型] 方法名字 [形参列表] //带[]的可以省略,返回值类型不能省略. 就拿main方法来说,public         static       void       main (String[] args){ 方法体: return 返回值://返回值要与返回值类型相匹配.没有返回值的话,返回值类型用void; } 方法的定义:为了完成某项功能,封装的一系列代码的集合: 方法的调用:同一个类中可以直接用方法名():调用:但

方法的定义与调用以及static关键字的用法

一.方法的定义与使用(形参只有值传递)以下所有方法在主类中定义,并且在主方法中直接调用. 1.方法声明: 语法: [访问修饰符]  [static] 返回值类型  方法名(参数列表){ 要执行的代码 } //自定义方法 public static void print(){ System.out.println("hello"); } 当方法以void声明时,表示此方法无返回值.但是void方法仍然可以与return返回值配合使用;表示结束方法调用.java方法只有值传递 packag

C#方法的定义、调用与调试

本节内容 1.方法的由来: 2.方法的定义与调用: 3.构造器(一种特殊的方法): 4.方法的重载(Override): 5.如何对方法进行debug: 6.方法的调用与栈* *推荐书目:CLR via C#和C# in Depth, 3rd Edition 1.方法的由来 ①方法(method)的前身是C/C++语言的函数(function) 方法是面向对象范畴的概念,在非面向对象语言中仍然称为函数. 可以使用C/C++语言做对比. *当函数以成员的身份出现时我们就叫它方法(始于C++) ②永