当前位置: 首页 > news >正文

Java--方法的使用

1.1什么是方法

方法顾名思义就是解决问题的办法,在程序员写代码的时候,会遇到很多逻辑结构一样,解决相同问题时,每次都写一样的代码,这会使代码看起来比较绒余,代码量也比较多,为了解决这个问题,我们把代码逻辑相同的代码写成一个方法,当我们解决相同问题时,直接调用这个方法,这会使代码看起来简洁明了。

方法:在Java中就是一个代码片段,与C语言中的函数类似

方法存在的意义:

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

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

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

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

举个列子:当我们需要求一个数的阶乘时

    public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int x= scanner.nextInt();for (int i = x-1; i >=1 ; i--) {x*=i;}System.out.println(x);}

你可能会写出这样的代码,是不是看见循环就烦,当我们学会方法就会写出下面这种简洁的代码

   public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int x= scanner.nextInt();System.out.println(fac1(x));}

是不是看着简洁多了

2.方法的基本格式

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

接下来来个实例:

public static int fac1(int x){for (int i = x-1; i >=1 ; i--) {x*=i;}return x;
}
——————————————————————————————————————————————————public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int x= scanner.nextInt();System.out.println(fac1(x));}

横线上面是方法的定义,下面是方法的调用;

注意事项 :

1. 方法定义时, 参数可以没有. 每个参数要指定类型

2. 方法定义时, 返回值也可以没有, 如果没有返回值, 则返回值类型应写成 void

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

4. 方法的定义必须在类之中, 代码书写在调用位置的上方或者下方均可.

5. Java 中没有 "函数声明" 这样的概念.

3.方法的执行过程

1.定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.

2.当方法被调用的时候, 会将实参赋值给形参.

3.参数传递完毕后, 就会执行到方法体代码.

4.当方法执行完毕之后(遇到 return 语句), 就执行完毕, 回到方法调用位置继续往下执行. 

5.一个方法可以被多次调用.

4.实参和形参

在定义方法时,参数类型(形参)可以有多个或者一个也没有

在调用方法时传递的参数叫做实参,参数要与方法的形参匹配(参数的个数和类型)

形参是实参的一份临时拷贝,即调用方法时创建,方法结束后销毁

举个例子:交换两个数

public static void swap(int x,int y){int t=x;x=y;y=t;
}public static void main(String[] args) {int x=10;int y=20;System.out.println("交换前:x="+x+"y="+y);swap(x,y);System.out.println("交换后:x="+x+"y="+y);}

这样写结果是不是交换了呢?肯定不是

主要原因还是因为形参只是实参的一份临时拷贝

那就没办法交换两个数了呗,交换两个数要传引用数据类型

比如数组就是引用数据类型

    public static void swap1(int arr[]){int x=arr[0];arr[0]=arr[1];arr[1]=x;}public static void main(String[] args) {int []arr={1,2};System.out.println("交换前arr[0]="+arr[0]+" arr[1]="+arr[1]);swap1(arr);System.out.println("交换后arr[0]="+arr[0]+" arr[1]="+arr[1]);}

5.没有返回值的方法

没有返回值的方法即方法的返回值类型void

例如:

   public static void print(){System.out.println("hhhhhh");}public static void main(String[] args) {print();}

同时,刚才的交换两个数也是没有返回值的方法

如果想要在某个条件下提前结束方法,也可以在满足条件后直接return

6.方法的重载

当我们想要一个函数的功能,实现多种参数时,我们就可以使用方法的重载

例子:

我们使用add方法时,即想实现两个整形的相加,又想实现两个double类型的相加,但是两种方法都是用作加法,记方法名又太麻烦,所以我们会选择重载

    public static int add(int x,int y){return x+y;}public static double add(double x,double y){return x+y;}public static void main(String[] args) {System.out.println(add(1,2));System.out.println(add(1.2,2.2));}

方法名都是add,方法名相同,但是实现的功能不同,就叫做方法的重载

重载的规则:

1.针对同一个类

2.方法名相同

3.方法的参数不同(参数个数或者参数类型)

4.方法的返回值类型不影响重载.

7.方法的递归

什么是递归:

一个方法在执行过程中调用自身, 就称为 "递归"

经典例子:斐波那契数列

public static int fib1(int x){if(x==1||x==2){return 1;}else{return fib1(x-1)+fib1(x-2);}
}

求斐波那契数列的第几个数时,这个数是前两个斐波那契数之和,而第一个和第二个斐波那契数是1,再求第x个斐波那契数时,需要先求前两个斐波那契数,当x为1或2时,返回1

红色箭头代表递的过程,蓝色箭头代表归的过程

小结:

1.递归是一种重要的编程解决问题的方式.

2.有些问题天然就是使用递归方式定义的(例如斐波那契数列, 二叉树等), 此时使用递归来解就很容易.

3.有些问题使用递归和使用非递归(循环)都可以解决. 那么此时更推荐使用循环, 相比于递归, 非递归程序更加高效

相关文章:

Java--方法的使用

1.1什么是方法 方法顾名思义就是解决问题的办法,在程序员写代码的时候,会遇到很多逻辑结构一样,解决相同问题时,每次都写一样的代码,这会使代码看起来比较绒余,代码量也比较多,为了解决这个问题…...

linux - 主次设备号自动申请

alloc_chrdev_region 原型如下,该函数向内核申请一个空闲的主设备号。 alloc_chrdev_region(&g_aputriger_dev, 0, APUTRIGER_MAX_NUM, "aputriger0"); 第四个参数是我们使用cat /proc/devices 看到的名称 /*** alloc_chrdev_region() - register a…...

我写了一套几乎无敌的参数校验组件!基于 SpEL 的参数校验组件「SpEL Validator」

前言 大家好,我是阿杆,不是阿轩。 参数校验这个东西,很多情况下都是比较简单的,用 NotNull、Size 等注解就可以解决绝大多数场景,但也有一些场景是这些基本注解解决不了的,只能用一些其他的方式处理&…...

输入序列太长 gan CGAN

transformer序列长度大导致计算复杂度高 GAN 2. 训练过程 第一阶段:固定「判别器D」,训练「生成器G」。使用一个性能不错的判别器,G不断生成“假数据”,然后给这个D去判断。开始时候,G还很弱,所以很容易被…...

uni-app scroll-view隐藏滚动条的小细节 兼容主流浏览器

开端 想写个横向滚动的列表适配浏览器,主要就是隐藏一下滚动条在手机上美观一点。 但是使用uni-app官方文档建议的::-webkit-scrollbar在目标标签时发现没生效。 .scroll-view_H::-webkit-scrollbar{display: none; }解决 F12看了一下,原来编译到浏览…...

Java常用API之LinkedList类解读

写在开头:本文用于作者学习我将官方文档中LinkedList 1.6版本中类中绝大部分API全测了一遍并打印了结果,日拱一卒,常看常新。 自己补充了一些对该数据结构的理解,如有不对的地方,请各位指正,谢谢。 首先&…...

移动端自适应

基本实现核心思想 基本原则上是,布局更多地使用flex,然后尺寸使用rem,vw,vh为单位如果是根据不同的屏幕需要有不同的布局了,一般通过检测屏幕尺寸换不同的站点或者媒体查询使用css rem 以html字体太小为1rem的大小&…...

自动化运维工具-Ansible

一、Ansible概述 Ansible是一种基于python开发的自动化运维工具,它只需要在服务端安装ansible,无需在每个客户端安装客户端程序,通过ssh的方式来进行客户端服务器的管理,基于模块来实现批量数据配置、批量设备部署以及批量命令执…...

力扣:62. 不同路径

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&…...

store内路由跳转router.push

选择action还是mutation 选择action mutation 是用来改变state的,不应该包含路由相关操作mutation是同步执行的,不应该包含异步操作,而路由是异步操作 action中进行路由跳转 因为vuex中没有this,所以不能用this.$router&#…...

ChatGPT Web Midjourney一键集成最新版

准备工具 服务器一台 推荐使用浪浪云服务器 稳定 安全 有保障 chatgpt api 推荐好用白嫖的api 项目演示 项目部署 浏览器访问casaos 添加软件原添加 https://gitee.com/langlangy_1/CasaOS-AppStore-LangLangy/raw/master/chatmjd.zip 安装此软件 等待安装 安装后再桌面设置…...

springboot mongodb分片集群事务

前置 mongodb分片集群想要使用事务,需要对应分片没有仲裁节点 代码 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId><version>2.1.0.RELEASE</version></d…...

node报错——解决Error: error:0308010C:digital envelope routines::unsupported——亲测可用

今天在打包vue2项目时&#xff0c;遇到一个报错&#xff1a; 最关键的代码如下&#xff1a; Error: error:0308010C:digital envelope routines::unsupportedat new Hash (node:internal/crypto/hash:80:19)百度后发现是node版本的问题。 在昨天我确实操作了一下node&…...

golang系统内置函数整理

go语言中有很多系统内置的函数&#xff0c; 为了方便学习&#xff0c;对系统内置函数的函数定义 入参和返回值做如下整理&#xff0c;以方便学习和记忆。 Go语言系统级别的内置函数不多&#xff0c;但是包含的知识点可不少&#xff0c;是学习go语言说必须要搞明白的基础知识 …...

武汉星起航:五对一服务体系,助力创业者成功进军跨境电商市场

随着全球化的深入发展和互联网的普及&#xff0c;跨境电商已成为越来越多国内创业者的首选。然而&#xff0c;跨境电商市场的复杂性和多变性使得许多新手创业者望而却步。在这样的背景下&#xff0c;武汉星起航电子商务有限公司以其独特的五对一服务体系&#xff0c;为创业者提…...

C++常用库函数——strcmp、strchr

1、strcmp&#xff1a;比较两个字符串的值是否相等 例如 char a1[6] "AbDeG",*s1 a1;char a2[6] "AbdEg",* s2 a2;s1 2;s2 2;printf("%d \n", strcmp(s1, s2));return(0); s1指向a1&#xff0c;s2指向a2&#xff0c;strcmp表示比较s1和s…...

vue3怎么使用vant的IndexBar 索引栏

Vant 是一个基于 Vue 的移动端 UI 组件库&#xff0c;它提供了许多常见的移动端组件&#xff0c;包括 IndexBar 索引栏。以下是如何在 Vue 3 中使用 Vant 的 IndexBar 索引栏的步骤&#xff1a; 安装 Vant 如果你还没有安装 Vant&#xff0c;你可以使用 npm 或 yarn 来安装它…...

VMware常见问题(技巧)总结

目录 问题虚拟机中windows11如何开启vt 虚拟化?虚拟机Windows 11 中的相机使用失败问题? 待续、更新中 问题 虚拟机中windows11如何开启vt 虚拟化? 编辑设置—打对钩 选对正确镜像( 可翻看以往文章,有提到) 虚拟机Windows 11 中的相机使用失败问题? 1 . 没安装合适的驱动 …...

VS Code 保存+格式化代码

在 VSCode 中&#xff0c;使用 Ctrl S 快捷键直接保存并格式化代码&#xff1a; 打开 VSCode 的设置界面&#xff1a;File -> Preferences -> Settings在设置界面搜索框中输入“format on save”&#xff0c;勾选“Editor: Format On Save”选项&#xff0c;表示在保存…...

word启动缓慢之Baidu Netdisk Word Addin

word启动足足花了7秒钟&#xff0c;你知道我这7秒是怎么过来的吗&#xff1f; 原因就是我们可爱的百度网盘等APP&#xff0c;在我们安装客户端时&#xff0c;默认安装了Office加载项&#xff0c;不仅在菜单栏上加上了一个丑陋的字眼&#xff0c;也拖慢了word启动速度........ 解…...

SeqGPT-560M智能邮件分类系统实战

SeqGPT-560M智能邮件分类系统实战 1. 引言&#xff1a;邮件管理的痛点与解决方案 每天打开邮箱&#xff0c;看到堆积如山的未读邮件&#xff0c;是不是感觉头大&#xff1f;工作邮件、会议通知、促销信息、垃圾邮件全都混在一起&#xff0c;找重要邮件就像大海捞针。手动分类…...

计算机组成原理知识可视化:影墨·今颜生成硬件结构图解

计算机组成原理知识可视化&#xff1a;影墨今颜生成硬件结构图解 每次给学生讲计算机组成原理&#xff0c;最头疼的就是怎么把那些抽象的概念讲明白。什么“冯诺依曼结构”、“CPU流水线”、“Cache工作原理”&#xff0c;光靠文字和PPT里的方块图&#xff0c;学生听得云里雾里…...

Pikachu靶场实战:File Inclusion漏洞利用与防御全解析

1. File Inclusion漏洞初探&#xff1a;从理论到靶场实战 文件包含&#xff08;File Inclusion&#xff09;漏洞是Web安全领域最常见的漏洞类型之一&#xff0c;它允许攻击者通过参数控制加载服务器上的任意文件。想象一下&#xff0c;你家的门锁如果设计不当&#xff0c;小偷只…...

视频硬字幕提取终极指南:用本地AI工具10倍提升你的字幕制作效率

视频硬字幕提取终极指南&#xff1a;用本地AI工具10倍提升你的字幕制作效率 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测…...

【多模态技术解析】先对齐再融合:动量蒸馏如何重塑视觉与语言表征学习

1. 为什么视觉和语言要先对齐再融合&#xff1f; 想象一下你正在教一个小朋友认识动物。如果先给他看一张猫的图片&#xff0c;再告诉他"这是狗"&#xff0c;小朋友肯定会困惑。这就是典型的模态未对齐问题——视觉信息和语言信息没有正确匹配。在多模态AI领域&#…...

I2C协议详解:从基础原理到工程实践

1. I2C协议基础与核心设计思想I2C&#xff08;Inter-Integrated Circuit&#xff09;总线是Philips公司&#xff08;现NXP&#xff09;在1980年代开发的一种同步、半双工串行通信协议。作为嵌入式系统中最常用的总线之一&#xff0c;I2C以其简洁的两线制&#xff08;SDA数据线S…...

QGIS进阶指南:动态标注与条件表达式高级应用

1. 动态标注的核心价值与应用场景 当你面对一个包含上千条建筑数据的地图图层时&#xff0c;传统静态标注会显得力不从心——商场和医院用相同字体显示&#xff0c;重要地标淹没在普通建筑中&#xff0c;数据更新后还得手动调整样式。这就是动态标注技术大显身手的时候了。 动态…...

六自由度机械臂的模型预测控制(MPC)探索

六自由度机械臂模型预测控制mpc在机器人领域&#xff0c;六自由度机械臂凭借其高度的灵活性&#xff0c;广泛应用于工业生产、医疗手术、科研探索等众多场景。而要精准操控这样复杂的机械臂&#xff0c;模型预测控制&#xff08;MPC&#xff09;无疑是一种强大的策略。 六自由度…...

终极指南:如何通过OmenSuperHub高效掌控暗影精灵硬件性能

终极指南&#xff1a;如何通过OmenSuperHub高效掌控暗影精灵硬件性能 【免费下载链接】OmenSuperHub 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 想要彻底摆脱官方Omen Gaming Hub的臃肿体验&#xff0c;获得纯净高效的暗影精灵硬件控制工具吗&#xf…...

MissionPlanner地面站调试Pixhawk:除了基础校准,你的F450还能设置这些高级功能

MissionPlanner地面站进阶指南&#xff1a;解锁Pixhawk飞控的隐藏潜力 当你已经能够熟练完成F450无人机的基础校准&#xff0c;让四轴稳稳升空只是起点而非终点。MissionPlanner作为Pixhawk飞控的瑞士军刀&#xff0c;藏着许多被普通教程忽略的进阶功能——这些功能往往决定着你…...