iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >全面分析Java方法的使用与递归
  • 269
分享到

全面分析Java方法的使用与递归

2024-04-02 19:04:59 269人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录java中方法的使用什么是方法方法的定义与使用方法如何进行调用及其方法调用过程方法的形参和实参方法重载方法签名递归java中方法的使用 什么是方法 举一个日常生活中的例子,比如我

java中方法的使用

什么是方法

举一个日常生活中的例子,比如我们在学校班长都会发送消息,比如它想让班级里的每一个人到某某教学楼某某班级进行开会,他就会给每个人发信息,同学今天我们有重要会议要进行开班会请你到某某教学楼某某班级来,如果班长要给每一个人发送信息,一个班里有很多人这样班长发信息就会很累,换个思路,班长要群发消息这样是不就会很省心。这也就是与java中的方法类似,我们定义一个方法实现你需要的功能,在你想要调用并且实现这个功能你就可以任意调用。

编程中如果重复实现某个功能就会

1.使程序变得繁琐

2.开发效率低下,做了大量重复性的工作

3. 不利于维护,需要改动时,所有用到该段代码的位置都需要修改

4. 不利于复用。

方法的意义:

1. 是能够模块化的组织代码(当代码规模比较复杂的时候).

2. 做到代码被重复使用, 一份代码可以在多个位置使用.

3. 让代码更好理解更简单.

4. 直接调用现有方法开发, 不必重复造轮子

方法的定义与使用

定义规范:

修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}

我们举一个例子:判断是否是闰年:

    public static boolean isLeapYear(int year) {
        if(year%4==0&&year%100!=0||year%400==0) {
            return true;
        }
        return false;
    }

实现两个数的加法:

    public static int add(int x, int y) {
    //实现两个数的加法
        return x + y;
    }

这样的方法就可以在你需要这个功能的时候进行调用,不需要你在写一遍,减少了代码的冗余。

一些关于方法的注意事项:

1. 修饰符:现阶段直接使用public static 固定搭配

2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void

3. 方法名字:采用小驼峰命名

4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开

5. 方法体:方法内部要执行的语句

6. 在java当中,方法必须写在类当中

7. 在java当中,方法不能嵌套定义

8. 在java当中,没有方法声明一说

方法如何进行调用及其方法调用过程

举一个例子:还是上面那个例子判断闰年?

 public static boolean isLeapYear(int year) {
        if(year%4==0&&year%100!=0||year%400==0) {
            return true;
        }
        return false;
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请您输入year判断是否是闰年?:>");
        int year =scan.nextInt();
        if(isLeapYear(year)) {
            //是闰年
            System.out.print(year+"是闰年");
        } else {
            System.out.print(year+"不是闰年");
        }
 }

我们来剖析一下这段代码:

首先我们需要定义一个年份:

调用方法:

我们可以总结一下方法的调用过程大致是:

调用方法--->传递参数--->找到方法地址--->执行被调方法的方法体--->被调方法结束返回--->回到主调方法继续往下执行

注意事项:

只有定义完方法之后才可以调用方法。并且只有调用方法时,方法才会执行。

我们定义的方法可以多次重复调用。完成我们想要完成的需求。

举个实例:计算1!+2!+3!+4!+5!;

这个代码虽然简单但是可以证明我们把一个功能都实现成一个方法,这样我们调用起来,代码逻辑就很清晰,所以建议我们实现一个功能的时候都要把它封装成一个方法。

方法的形参和实参

Java中方法的形参就相当于sum函数中的自变量n,用来接收sum函数在调用时传递的值的。形参的名字可以随意取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。

例如:实现一个方法交换两个整型变量

传值调用:

根据上面的答案,并不是我们想要的结果那是为什么呢?

我们来剖析一下:

有的人还会说那我把形参写成 a和b他会交换a和b的值么?

答案并不会,形参的名字可以任意取与名字无关,如果写成a和b那只能说明原来的两人和你形参这两个人是重名的,并不会本质的改变。

那我们究竟怎么才能改变两个数的值呢? 

这就与C语言类似,在c语言中是传两个数的地址而在java中传的是引用,引用存储的是这两个变量在内存的地址,通过地址就可以改变。

由于java语言中没有所谓的取地址,在Java中有引用类型,引用类型所引用的变量就是存储在内存当中的地址。通过地址就可以实质的改变某个值。

在java中引用类型有许多比如,类,对象,数组字符串等等。

我们接下来利用数组进行交换两个数的值。

public static void Swap(int[] array) {
        int tmp = array[0];
        array[0] = array[1];
        array[1] = tmp;
    }
public static void main(String[] args) {
        int[] array =new int[]{10,20};
        Swap(array);
        System.out.println(Arrays.toString(array));
}

为啥两个值交换呢?因为数组是引用类型,引用变量(这里是array)存放的是数组中的元素在内存中的地址,通过地址就可以真正的改变这两个值。

方法重载

百度百科:方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。调用重载方法时,Java编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数或参数的顺序不同的方法。 Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同。调用方法时通过传递给它们的不同个数和类型的参数,以及传入参数的顺序来决定具体使用哪个方法。

看上面复杂的概念一时可能看不懂不如我来举一个例子吧。

好比如我们要实现数的加法,要同时实现两个整形的加法,两个浮点数的加法,三个整形数的加法

我们没学过方法重载可能会这么写。

  public static int addTwoInt(int a,int b) {
        return a+b;
    }
    public static int addThirdInt(int a,int b,int c) {
        return a+b+c;
    }
    public static double addTwoDouble(double a,double b) {
        return a+b;
    }
    public static void main(String[] args) {
        int a =10;
        int b =20;
        int c =20;
        double d =3.14;
        double e =9.89;
        System.out.println(addTwoInt(a, b));
        System.out.println(addThirdInt(a, b, c));
        System.out.println(addTwoDouble(d, e));
 
    }

对于学过方法重载的同学看见这个代码真想。。。。。

这样的代码是不是看着很繁琐,每一次实现一个加法就要起一个名。上面的代码需要提供许多不同的方法名,而取名字本来就是让人头疼的事情

那我们接下来使用方法重载又有多大的变化呢?

我们都使用相同的名字在idea不会报错,原因是在java语言中支持方法的重载。

所以,在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了

根据这三个代码我们就可以总结出方法重载的规则了

第一:方法名相同;

第二:返回值不做要求;

第三:方法名的参数列表不同(包括参数的返回类型,形参的顺序,形参的个数);

方法签名

既然有方法重载,那java是内部是怎么支持重载的呢?那就要说一说方法签名了。

方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。

我们通过找到生成代码的.class文件 然后右键打开powershell

 输入一个 javap -v +文件名 

 回车之后就可以看到java代码的汇编代码,根据汇编代码就可以看到方法的签名。

 我们既然定义了相同名字的方法,那编译器是怎么识别我们要调用哪个方法呢?没错这就是方法签名起了作用,每定义一个方法在编译完生成class文件,就会生成一个方法签名,编译器就是根据每个方法的签名不同而识别的,比如你要计算两个double类型的和,那他就会直接找DD的这个签名而不会匹配到其他的签名。

递归

递归定义是数理逻辑和计算机科学用到的一种定义方式,使用被定义对象的自身来为其下定义(简单说就是自我复制的定义)。递归定义(recursive definition)亦称归纳定义,一种实质定义,指用递归的方法给一个概念下的定义

通俗的讲,当我们遇到一个问题,这个问题具有每一步的解法都是相同的,我们就可以将这个大问题分解成多个子问题,最终这个问题就会被解决;

实现递归有两个必要条件:

第一:子问题必须要与原问题的解决方法是相同的。

第二:必须要有判断条件防止递归深度太深导致栈溢出。

我们来举一个经典递归例子:求N的阶乘

 我们可以思考一下根据上图的推理第一:他符合原问题的解法与子问题的解法是一致的,有符合判断条件(判断条件就是如果n==1的时候1!=1).这就是递归 从5!被分解成5*4!,4*3!.......

这样的问题就迎刃而解了。

public static int factor(int n) {
        if(n==1) {
            return 1;
        }
        return n* factor(n-1);
    }
    public static void main(String[] args) {
        System.out.println(factor(5));
    }

 递归小练习

按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)。

这个题我们怎么思考呢?

首先要得到一个数字的每一位肯定是除10 和模10循环知道数字为0

那我们可以将1234这样来分解;

    public static void printEveryNum(int num) {
        if(num<=9) {
            System.out.print(num+" ");
            return;
        }
        printEveryNum(num/10);
        System.out.print(num%10+" ");
    }
    public static void main(String[] args) {
        int num =1234;
        printEveryNum(num);
    }

递归求 1 + 2 + 3 + ... + 10  递归实现1一直加到10的和

    public static int sum(int num) {
        if(num==0) {
            return 0;
        }
        return num+sum(num-1);
    }
    public static void main(String[] args) {
        int a =10;
        System.out.println(sum(100));
    }

到此这篇关于全面分析Java方法的使用与递归的文章就介绍到这了,更多相关Java方法与递归内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 全面分析Java方法的使用与递归

本文链接: https://www.lsjlt.com/news/147354.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 全面分析Java方法的使用与递归
    目录java中方法的使用什么是方法方法的定义与使用方法如何进行调用及其方法调用过程方法的形参和实参方法重载方法签名递归java中方法的使用 什么是方法 举一个日常生活中的例子,比如我...
    99+
    2024-04-02
  • Java中方法的使用、重载与递归的示例分析
    这篇文章主要介绍了Java中方法的使用、重载与递归的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一.方法的基本使用1.什么是方法方法是一个代码片段,类似于C语言中的...
    99+
    2023-06-25
  • Java方法与递归怎么使用
    今天小编给大家分享一下Java方法与递归怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。java中方法的使用什么是方法...
    99+
    2023-06-30
  • Java方法递归的形式和常见递归算法代码分析
    本篇内容介绍了“Java方法递归的形式和常见递归算法代码分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法递归方法递归的形式什么是方法递...
    99+
    2023-07-05
  • C++ 函数的递归实现:递归与非递归算法的比较分析?
    递归算法通过函数自调用解决结构化的问题,优点是简洁易懂,缺点是效率较低且可能发生堆栈溢出;非递归算法通过显式管理堆栈数据结构避免递归,优点是效率更高且避免堆栈溢出,缺点是代码可能更复杂。...
    99+
    2024-04-22
    c++ 递归 堆栈溢出
  • java尾部递归的使用方法
    这篇文章给大家分享的是有关java尾部递归的使用方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、说明在尾部递归中,递归调用是函数执行的最后一件事,因此编译器不需要保存函数堆栈帧。大多数编译器可以像优化迭代代...
    99+
    2023-06-15
  • Java开发深入分析讲解二叉树的递归和非递归遍历方法
    目录前言1.递归遍历2.非迭代遍历3.二叉树的统一迭代法前言 二叉树的遍历方法分为前序遍历,中序遍历,后续遍历,层序遍历。 1.递归遍历 对于递归,就不得不说递归三要素:以前序遍历...
    99+
    2024-04-02
  • Java中方法的使用、重载与递归的详细介绍
    目录一.方法的基本使用1.什么是方法2.方法基本语法二.方法的重载1.重载的作用2.重载的使用规则三.方法的递归1.递归的概念2.递归执行过程分析3.递归练习1.按顺序打印一个数字的...
    99+
    2024-04-02
  • java词法分析器DDL递归应用详解
    目录前言intellij plugin词法解析状态迁移DDL 解析递归解析总结前言 最近大部分时间都在撸Python,其中也会涉及到将数据库表转换为Python中ORM框架的Mode...
    99+
    2024-04-02
  • java词法分析器DDL递归怎么应用
    这篇文章主要讲解了“java词法分析器DDL递归怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java词法分析器DDL递归怎么应用”吧!intellij plugin考虑到我们主要是...
    99+
    2023-07-02
  • Java中的递归方法怎么用
    小编给大家分享一下Java中的递归方法怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!递归方法定义本身调用方法本身的现象叫做递归在这之前我们学的东西:例如St...
    99+
    2023-06-22
  • Java 递归重难点分析详解与练习
    目录递归是什么分析递归的过程递归练习按顺序打印一个数的每一位递归是什么 就是一个方法在执行的时候,自己调用自己。 递归的要求: 1 有一个趋近于终止的条件 2 实现递归要去推导出一个...
    99+
    2024-04-02
  • 【Java基础篇】方法的使用(方法的重载和递归)
    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏:Java.SE,本专栏主要讲解运算符,程序逻辑控制,方法的使用,数组的使用,类和对象,继承和多态,抽象类和接口等内容 ...
    99+
    2023-08-20
    java 开发语言 jvm
  • java怎么使用递归方法求阶乘
    这篇文章主要介绍了java怎么使用递归方法求阶乘,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java 用递归方法求阶乘一个正整数的阶乘,是所有不大于该数的正整数的积,并且0...
    99+
    2023-06-15
  • Java 递归重难点的实例分析
    本篇文章给大家分享的是有关Java 递归重难点的实例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。递归是什么就是一个方法在执行的时候,自己调用自己。递归的要求:1 有一个趋...
    99+
    2023-06-25
  • Java方法递归的形式和常见递归算法(方法递归结合File类查找文件)
    目录方法递归方法递归的形式递归常见的算法非规律递归案例方法递归 方法递归的形式 什么是方法递归 方法直接调用自己或者间接调用自己的形式称为方法递归( recursion)。 递归做为...
    99+
    2023-02-28
    Java方法递归 java递归算法 java File类查找文件
  • Java中的什么场景使用递归,如何使用递归
    目录什么是递归?递归有什么优点?迭代和递归的区别递归的三个条件什么场景下适合使用递归场景一场景二总结Java 递归算法一、概述二、应用场景三、示例四、实际示例五、递归的缺点什么是递归...
    99+
    2024-04-02
  • java全排列递归算法怎么应用
    全排列是一种经典的组合数学问题,递归算法可以很好地解决该问题。下面是一种Java递归算法实现全排列的例子:```javaimport...
    99+
    2023-09-23
    java
  • C++二分查找与递归的方法是什么
    本篇内容主要讲解“C++二分查找与递归的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++二分查找与递归的方法是什么”吧!#include//#include//#include//...
    99+
    2023-06-04
  • Java 精炼解读递归的概念与使用
    目录一、递归的概念1.什么是递归?2.递归讲解二、递归的使用 总结:一、递归的概念 1.什么是递归? 递归就是:方法自己调用方法的过程。 使用递归有两个前提条件: 1.有一...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作