JavaSE13-方法

news2024/11/17 17:25:18

目录

1.方法的基本用法

1.1.什么是方法

1.2.方法定义语法

1.3.方法调用的执行过程

1.4.实参和形参的关系

1.5.方法的返回值

2.方法重载

2.1.方法重载定义

2.2.代码示例

3.方法递归

3.1.方法递归定义

3.2.方法递归使用条件

3.3.递归与非递归优劣比较

3.4.递归执行过程分析


1.方法的基本用法

1.1.什么是方法

方法就是一个代码片段。类似于C语言中的函数。分为主方法和自己定义的方法。

方法存在的意义:

  • 能够模块化地组织代码(当代码规模比较复杂时)。
  • 实现代码复用。直接调用现有写好的方法,不必重复造轮子。
  • 让代码更好理解,更简单。

1.2.方法定义语法

//方法定义
public static 方法返回值 方法名称([参数类型 形参 ...]){
     方法体代码;
     [return [返回值];]  //没有返回值直接return;表示方法直接退出
}

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

注:
1).public 和 static 两个关键字在此处具有特定含义。(后面文章有详细介绍)。

2).方法定义时,参数可有可无。若有要指定其类型。

3).方法定义时,返回值可有可无。若无返回值,则返回值类型应写成 void。

4).方法定义时的参数称为 "形参",方法调用时的参数称为 "实参"。

5).方法的定义必须在类之中,方法定义写在方法调用位置的上方或者下方均可。

6).Java 中没有 "函数声明" 的概念。定义一个方法,要有方法体实现{ }。(特殊方法除外,抽象方法等)

1.3.方法调用的执行过程

  • 定义方法时,不会执行方法的代码。只有调用方法时才会执行。
  • 当方法被调用时,会将实参赋值给形参。
  • 参数传递完毕后,就会执行到方法体代码。
  • 当方法执行完毕之后(遇到 return 语句),回到方法调用位置继续往下执行。
  • 一个方法可以被多次调用。

(对方法的注释采用文档注释)

1.4.实参和形参的关系

形参:方法定义时的参数;实参:方法调用时的参数。

代码示例:交换两个整型变量

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

原因分析:

int a = 10;
int b = 20;

int x = a;
int y = b;

int tmp = x;
x = y;
y = tmp;

Java中的参数传递只有值传递!对于基本类型来说,形参相当于实参的拷贝。即传值调用。对 x 和 y 的修改,不影响 a 和 b。即形参交换了,实参并没有交换。

解决办法:传引用类型参数(例如数组),它还是值传递,只不过这里的值是“地址”。

class Test {
    public static void main(String[] args) {
        int[] arr = {10, 20};
        swap(arr);
        System.out.println("a = " + arr[0] + " b = " + arr[1]);
    }
    public static void swap(int[] arr) {
        int tmp = arr[0];
        arr[0] = arr[1];
        arr[1] = tmp;
    }
}
// 运行结果
a = 20 b = 10

1.5.方法的返回值

方法的返回值是可有可无的。根据当前方法的作用来判断是否有返回值。

有返回值:return 返回值;

无返回值(方法返回值定义为void):不写return语句;也可写只写return语句,直接退出方法。

2.方法重载

2.1.方法重载定义

在同一个类中,定义了一组(若干个)方法,其方法的名称相同,方法的参数不同(参数个数或参数类型),与方法返回值类型和修饰符无关。

2.2.代码示例

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(int x, int y) {
       return x + y;
  }//编译会报错
  //参数类型为int,返回值类型为double,int->double是小类型->大类型,可自动转换类型。
  //与上面的方法只是返回值不同,当两个方法名相同, 参数相同, 但返回值不同时, 不构成重载。

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

println()就是一个最常用的重载方法。

3.方法递归

3.1.方法递归定义

一个方法在执行过程中调用自身,称为递归。一定要注意方法的语义(方法写出来的作用)。

  • 递:拆解问题
  • 归:碰到终止条件时,陆续给返回值

3.2.方法递归使用条件

  • 一个大问题可以拆分为多个子问题
  • 拆分后的子问题和原问题,除了数据规模不一样,解决思路完全相同
  • 必须存在递归终止条件

3.3.递归与非递归优劣比较

递归:程序执行速度慢,原因是进行了大量的重复计算,但代码好想,好写;

非递归(迭代,循环):程序执行效率更高。

3.4.递归执行过程分析

要想理解清楚递归执行过程,必须先理解清楚 "方法的执行过程",尤其是 "方法执行结束之后,回到调用位置继续往下执行。

代码示例: 递归求 N 的阶乘

public static void main(String[] args) {
    int n = 5;
    int ret = factor(n);
    System.out.println("ret = " + ret);
}

public static int factor(int n) {
    System.out.println("函数开始, n = " + n);
    if (n == 1) {
        System.out.println("函数结束, n = 1 ret = 1");
        return 1;
    }

    int ret = n * factor(n - 1);
    System.out.println("函数结束, n = " + n + " ret = " + ret);
    return ret;
}

// 执行结果
函数开始, n = 5
函数开始, n = 4
函数开始, n = 3
函数开始, n = 2
函数开始, n = 1
函数结束, n = 1 ret = 1
函数结束, n = 2 ret = 2
函数结束, n = 3 ret = 6
函数结束, n = 4 ret = 24
函数结束, n = 5 ret = 120
ret = 120

程序按照序号中标识的 (1) -> (8) 的顺序执行。(1)-(4)递;(5)-(8)归。

方法调用的时候,会有一个"栈" 这样的内存空间描述当前的调用关系。称为调用栈。

每一次的方法调用就称为一个"栈帧",每个栈帧中包含了这次调用的参数是哪些,返回到哪里继续执行等信息。



 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Nodejs计算机毕业设计基于网络C++实验管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

SpringBoot+Vue项目部门人事管理系统的设计与实现

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

Vit 中的 Token 改进版本:Token Mreging: Your Vit But Faster 论文阅读笔记

Vit 中的 Token 改进版本:Token Mreging: Your Vit But Faster 论文阅读笔记一、Abstract二、引言三、相关工作3.1 有效的 Transformer3.2 Token 的减少3.3 Token 的联合四、Token 融合4.1 策略4.2 Token 相似性4.3 双边软匹配4.4 追踪 Token 的尺寸4.5 采用融合操作…

[附源码]计算机毕业设计Python餐馆点餐管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

非零基础自学Golang 第11章 文件操作 11.3 处理JSON文件 11.3.2 解码JSON 11.4 小结

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.3 处理JSON文件11.3.2 解码JSON11.4 小结第11章 文件操作 11.3 处理JSON文件 11.3.2 解码JSON 解码JSON会使用到Unmarshal接口,也就是Marshal的反操作。 func Unmarshal(data []byte, v interf…

30岁零基础没学历学Python怎么样?30岁学习Python晚吗?

30岁零基础没学历学Python怎么样?30岁学习Python晚吗?任何时候开始都不晚。30岁开始学习Python听起来年纪有点大,大家认为编程上了年纪学习编程语言是一个劣势。想在三十岁的时候通过学习Python来谋求一份IT程序员工作,则需要有一…

SQL笔记

SQL笔记 基本概述 数据库:保存有组织的数据的容器(通常是一个文件或一组文件)。容易混淆:人们通常用数据库这个术语来代表他们使用的数据库软件,这是不正确的,也因此产生了许多混淆。确切地说&#xff0c…

抖音关键词排名优化技巧,手把手教你怎样优化抖音关键词

云南百收科技有限公司 1、标题中出现关键词是关键词排名靠前的基础。 一篇文章中标题中一定要出现你想做的关键词,因为搜索引擎是是匹配标题的,如果你标题中没有关键词,是不会有排名的。而且还有一点,关键词的位置要靠近标题最前面…

python+pyqt5+mysql设计图书管理系统(1)- 数据库

一、概述 前面学习了python,pyqt和mysql的一些基础知识,接下来运用学习的东西进行实操制作一个项目--图书管理系统。 项目介绍:图书管理系统对于我们的图书管理来说非常重要,管理图书者可以通过系统有效的管理书籍,用户可以通过系统快速有效的找到自己需要的书籍。相比人工…

【目标跟踪】Kalman滤波目标跟踪【含Matlab源码 388期】

⛄一、获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。 获取代码方式2: 完整代码已上传我的资源:【目标跟踪】基于matlab Kalman滤波目标跟踪【含Matlab源…

聊一聊Unity的Test Framework应该怎么用

其实 Unity 很早就出了这个包,不过感觉基本上没什么人用,这么好的东西,本着让所有人都能了解的态度,今天就来聊聊它应该怎么使用。 第1步先安装它,或者给它升级到最新。 第2步打开工具的主窗口 支持分别在 PlayMode 或…

unity 2022大三期末大作业 3D立体魔方游戏(附下载链接)

unity 2022大三期末大作业 3D立体魔方游戏 这是本人的一个unity期末大作业,实现比较简单,unity版本是2018 的,导入即可运行无错误 下载链接 游戏可以一键打乱魔方的顺序,也可以一键还原等等功能,实现了魔方的使用功能…

手把手教你,从零开始搭建Spring Cloud Alibaba这份笔记太牛了

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 Springcloud 和 Srpingcloud Alibaba 区别? SpringCloud: 部分组件停止维护和更新,给开发带来不便;SpringCl…

[附源码]Nodejs计算机毕业设计基于推荐算法的鞋服代购平台Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

【代码规范】lombok注解使用

【代码规范】lombok注解使用一、前言二、常用注解三、使用示例一、前言 上一篇文章(【JVM知识】插入式注解处理器实现java编程规范检测)总结了一下插入式注解,我们知道lombok插件是通过插入式注解处理器实现的,并且lombok插件在工…

版本控制器Git的使用。

目录 一、分布式版本工具 1、基本介绍 2、Git 安装配置 3、本地仓库和基础指令 二、分支 1、分支概述 2、解决冲突 三、Git远程仓库 1、常用的托管服务[远程仓库] 2、配置SSH公钥 3、操作远程仓库 4、解决合并冲突 三、IDEA中使用Git 1、在Idea中配置Git 2、ID…

什么是用户标签体系?

一.概况 标签:对某一类特定群体或对象的某项特征进行抽象分类和概括 标签体系:根据用户的“基本属性”,“行为特征”,“社交网络”,“心理特征” 和 “兴趣爱好”等,把个性化的用户,打上标签化…

入门:认识容器镜像

要启动容器最关键的就是镜像,我们来看看镜像相关的介绍。 初识容器镜像 首先我们来了解一下镜像的相关操作,比如现在我们希望把某个镜像从仓库下载到本地,这里使用官方的hello-world镜像: docker pull hello-world 只需要输入pull…

【CANN训练营第三季】2022年度第三季进阶班之AI目标属性编辑应用-数据预处理

了解华为的生态已经两年有余,用CANN做过两个模型的转换,跑过推理测试,但是感觉还是对CANN框架一知半解,恰巧看到2022年度第三季度训练营开班,赶紧报名参与上车。 本次课程是进阶版第一节正式课,主要讲解的…

零基础自学Python要多久才能学会?

零基础自学Python要多久?学习Python开发的周期因人而异,由于基础、学习效率不同有的人学习进度快,需要六个月到一年不等,有的人自律性较差可能需要更久的时间才能学会,今天小编分享下6个月学习周期内的自学Python的学习…