【一步一步了解Java系列】:Java中的方法对标C语言中的函数

看到这句话的时候证明:此刻你我都在努力~
加油陌生人~


微信图片编辑_20240229212205.png

个人主页:Gu Gu Study

专栏:一步一步了解Java

喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹。

_ 如果喜欢能否点个赞支持一下,谢谢啦!_
作者:小闭


引言:相信大家在学习C语言后再学习Java时就经常听到有人说到”方法“,但是当你看到他们所说的方法时,你就会就会感觉到熟悉,你可能就会觉得这不就是C语言中的函数吗?那么Java中的方法和C语言中的有什么不一样吗?其实这两者确实区别不大,甚至可以说一样,只不过C语言面向过程的语言而Java是面向对象的语言。所以叫法上是有一点区别的。那么下面我们就来学习一下Java中的方法的知识吧。


什么是方法以及方法存在的意义

在我看来方法就是将一些代码封装起来的一片代码块,这个代码块可以完成一个单独的功能比如:加法,加法,除法等。再比如:面向对象时有个对象的“说话”功能。
方法存在的意义:

  • 是能够模块化的组织代码(当代码规模比较复杂的时候).
  • 做到代码被重复使用, 一份代码可以在多个位置使用.
  • 让代码更好理解更简单.
  • 直接调用现有方法开发, 不必重复造轮子.

给大家举一个例子:

public static void func1() {int year = 1900;if ((0 == year % 4 && 0 != year % 100) || 0 == year % 400) {System.out.println(year + "年是闰年");} else {System.out.println(year + "年不是闰年");}}

如上就是Java中的一个方法,确实与C语言的函数差不多,差别就是语法上的不一样。上面的代码就是:将判断一个年份是否为闰年的代码写到这一块地方,而这一块地方就是方法。


方法的定义

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

其中返回值也可以没有,这时返回值类型就为void。
如下我们就示例一下:

public static void func1() {int year = 1900;if ((0 == year % 4 && 0 != year % 100) || 0 == year % 400) {System.out.println(year + "年是闰年");} else {System.out.println(year + "年不是闰年");}
}

在定义一个实现加法的方法:

public static int func2(int a,int b){return a+b;        }

注意事项:

  1. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成
    void
  2. 方法名字:采用小驼峰命名
    小驼峰即:setName,setNum,亦或是find,found。
  3. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
  4. 方法体:方法内部要执行的语句
  5. 在java当中,方法必须写在类当中
  6. 在java当中,方法不能嵌套定义
  7. 在java当中,没有方法声明一说
  8. 【方法调用过程】 调用方法—>传递参数—>找到方法地址—>执行被调方法的方法体—>被调方法结束返回—>回到主调方法继续往下 执行

如下是一个完整的方法运用过程:

public class Main {
public static void main(String[] args) { int sum = 0;for (int i = 1; i <= 5; i++) {sum += fac(i);} System.out.println("sum = " + sum);
} public static int fac(int n) {System.out.println("计算 n 的阶乘中n! = " + n);int result = 1;for (int i = 1; i <= n; i++) {result *= i;} return result;}}

image.png

实参和形参

那么何为实参何为形参呢?下面我们通过一个代码进行详细解析:

public static int fac(int n) {   //这里n为形参System.out.println("计算 n 的阶乘中n! = " + n);int result = 1;for (int i = 1; i <= n; i++) {result *= i;}return result;
}public static void main(String[] args) {int n=5;int num=fac(n);   //这里n为实参System.out.println(c);}

调用方法时,给方法传值的是实参,拷贝传来的值的变量为形参。
注意:
Java中没有C语言中的传值调用和传址调用的区别。Java中无法拿到实参的地址的,所以可以简单的理解为如果传参传时的数据类型为_基本类型数据_那么这就是相当于C语言的传值调用 。对此的总结还是那句话。
总结:形参只是实参的临时拷贝,形参的改变不会影响实参。(这是针对基本数据类型来说的)
如下:

public static void main(String[] args) {int a = 10;int b = 20;swap(a, b);System.out.println("main: a = " + a + " b = " + b);
}
public static void swap(int x, int y) {int tmp = x;x = y;y = tmp;System.out.println("swap: x = " + x + " y = " + y);
}

实参a和b是main方法中的两个变量,其空间在main方法的栈(一块特殊的内存空间)中,而形参x和y是swap方法中 的两个变量,x和y的空间在swap方法运行时的栈中,因此:实参a和b 与 形参x和y是两个没有任何关联性的变量, 在swap方法调用时,只是将实参a和b中的值拷贝了一份传递给了形参x和y,因此对形参x和y操作不会对实参a和b 产生任何影响。


方法重载
  1. 什么是方法重载?
    方法重载(Overloading)是面向对象编程(OOP)中的一个重要概念,它允许在同一个类中定义多个具有相同名称但参数列表不同的方法。这是多态性的一种形式,使得同一个操作可以应用于不同的数据类型。
  2. 方法重载的条件
    要实现方法重载,需要满足以下条件:

方法名相同:重载的方法必须具有相同的方法名。
参数列表不同:参数列表可以是参数数量不同,参数类型不同,或者参数顺序不同。
返回类型可相同可不同:方法的返回类型可以相同,也可以不同,但这并不是重载的决定性因素。

3. 方法重载的优点:
代码复用:通过重载,可以复用相同的方法名,减少代码冗余。
提高代码可读性:使用相同的方法名可以提高代码的可读性,使得代码更加直观易懂。
增强灵活性:允许开发者根据不同的参数类型调用不同的方法,增强了程序的灵活性。
4. 方法重载的实现
以下是Java语言中实现方法重载的一个简单示例:

public class Calculator {
// 加法方法重载示例
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {return a + b;
}public int add(int a, int b, int c) {return a + b + c;
}}

在这个例子中,Calculator类定义了三个add方法,它们具有相同的方法名,但是参数列表不同。

  1. 编译器如何区分重载方法
    编译器在调用重载方法时,会根据方法调用时提供的参数类型和数量来确定调用哪个方法。编译器会寻找与调用时参数最匹配的方法。
  2. 注意事项:
    参数类型和数量:重载方法时,参数的类型和数量是关键,而返回类型不是。
    可变参数:在某些语言中,如Java,可以使用可变参数(Varargs)来实现方法重载。
    构造函数重载:构造函数也可以被重载,以支持不同的初始化方式。
  3. 结论
    方法重载是一种强大的编程技术,它允许开发者编写更加灵活和可读的代码。通过合理使用方法重载,可以提高程序的可维护性和扩展性。
方法的递归

了解递归思想
把⼀个大型复杂问题层层转化为⼀个与原问题相似,但规模较小的子问题来求解;直到子问题不能再 被拆分,递归就结束了。所以递归的思考方式就是把大事化小的过程。 递归中的递就是递推的意思,归就是回归的意思,接下来慢慢来体会

递归的两个重要条件
**递归在书写的时候,有2个必要条件:

一、递归存在限制条件,当满足这个限制条件的时候,递归便不再继续。 **
二、每次递归调⽤之后越来越接近这个限制条件。


下面是一个求3的阶乘的代码,运用递归来完成。
public class Test {public static int function(int n){if(n==1){//递归终止条件return 1;}else{//递归调用return function(n - 1) * n;}}public static void main(String[] args) {int num = 3;int ret =function(num);System.out.println(ret);}
}

下面给大家画一下一个大概的流程图
image.png
以上就是今天的所有的知识了,喜欢的话可以点个赞哦!

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

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

相关文章

Xfce4桌面背景和桌面图标消失问题解决@FreeBSD

问题&#xff1a;Xfce4桌面背景和桌面图标消失 以前碰到过好几次桌面背景和桌面图标消失&#xff0c;整个桌面除了上面一条和下面中间的工具条&#xff0c;其它地方全是黑色的问题&#xff0c;但是这次重启之后也没有修复&#xff0c;整个桌面乌黑一片&#xff0c;啥都没有&am…

认知V2X的技术列一个学习大纲

为了深入学习和理解V2X&#xff08;Vehicle to Everything&#xff09;技术&#xff0c;以下是一个学习大纲的概述&#xff0c;结合了参考文章中的相关数字和信息&#xff1a; 一、V2X技术基础 V2X概述 定义&#xff1a;V2X是车用无线通信技术&#xff0c;将车辆与一切事物相连…

WebService相关内容

WebService中的wsdl什么意思? WSDL(Web Services Description Language)Web服务描述语言及其功能、操作、参数和返回值的XML格式的语言。它在Java和其他编程语言中都可以使用,用于定义Web服务的接口以及如何与这些服务进行交互。 WSDL的作用 WSDL的主要作用是提供一种标准…

idea上传git命令

git init git remote add origin git add . git commit -m "标题" git push -u origin master

Qt 模型视图详细介绍

一.文件系统模型&#xff08;QFileSystemModel&#xff09; 1.定义 QFileSystemModel 是 Qt 框架中的一个类&#xff0c;它提供了一个用于管理文件系统结构的模型。它可以用于显示文件系统的目录结构&#xff0c;以及在视图中显示文件和文件夹的详细信息。 这个模型将文件系统…

15分钟Element-UI快速入门

Element-UI 是一个基于 Vue.js 2.0 的桌面端组件库&#xff0c;它提供了丰富的、可复用的组件&#xff0c;帮助开发者快速构建出美观且功能强大的网页应用。以下是一个 Element-UI 的快速入门指南&#xff1a; 1. 安装 Element-UI 首先&#xff0c;你需要在你的 Vue.js 项目中…

各种测试方法,黑盒测试、白盒测试,静态测试,动态测试

1.测试方法 软件测试方法的分类有很多种&#xff0c;以测试过程中程序执行状态为依据可分为静态测试 (Static Testing,ST) 和动态测试 (Dynamic Testing,DT); 以具体实现算法细节和系统内部结构的相 关情况为根据可分黑盒测试、白盒测试和灰盒测试3类&#xff1b;从程序执行的方…

Python编程之调试魔法与列表逆转之谜

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、调试魔法&#xff1a;揭开Python编程的神秘面纱 代码调试实例 二、列表逆转之谜&#…

实验一:通过路由器实现内外网互联

通过路由器实现内外网互联 一、实验拓扑 相关配置详见下图&#xff0c;内网区域为AR2以内设备&#xff0c;外网区域以AR1和PC1代替进行实验测试。 二、实验要求 通过路由器实现内外网互联&#xff1a; 1.各内网PC可自动获取ip地址&#xff1b; 2.各内网PC可ping通外网PC&…

SCSS 基本使用详解

一、引言 SCSS 是 Sass&#xff08;Syntactically Awesome Stylesheets&#xff09;的其中一种语法&#xff0c;是一种预处理器脚本语言&#xff0c;能够扩展 CSS 的功能&#xff0c;使其更加强大和高效。SCSS 保留了 CSS 的原有语法&#xff0c;同时增加了变量、嵌套规则、混…

蓝海卓越计费管理系统 agent_setstate.php SQL注入漏洞复现

0x01 产品简介 蓝海卓越计费管理系统是一套以实现网络运营为基础,增强全局安全为中心,提高管理效率为目的的网络安全运营管理系统,提供“高安全、可运营、易管理”的运营管理体验,基于标准的RADIUS协议开发,它不仅支持PPPOE和WEB认证计费,还支持802.1X接入控制技术,与其…

WordPress外贸网站建设的成功要素与技术点

WordPress作为一款强大的建站平台&#xff0c;为外贸企业提供了丰富的功能和灵活的定制选项。在这篇文章中&#xff0c;我们将揭示一些成功建站的秘笈&#xff0c;涵盖了WordPress外贸网站建设中的关键要素和技术点&#xff0c;帮助您打造一个引领行业的成功网站。 1. 选择合适…

【java深入学习第3章】利用 Spring Boot 和 Screw 快速生成数据库设计文档

免费多模型AI网站,支持豆包、GPT-4o、谷歌Gemini等AI模型&#xff0c;无限制使用&#xff0c;快去白嫖&#x1f449;海鲸AI&#x1f525;&#x1f525;&#x1f525; 在开发过程中&#xff0c;数据库设计文档是非常重要的&#xff0c;它可以帮助开发者理解数据库结构&#xff0…

Kubernetes部署dashboard

Kubernetes部署dashboard Kubernetes集群安装 鲲鹏arm64架构下安装KubeSphere linux安装部署k8s(kubernetes)和解决遇到的坑 dashboard部署 $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashbo…

STM32学习和实践笔记(30):窗口看门狗(WWDG)实验

1.WWDG介绍 1.1 WWDG简介 上一章我们已经介绍了IWDG&#xff0c;知道它的工作原理就是一个12位递减计数器不断递减计数&#xff0c;当减到0之前还未进行喂狗的话&#xff0c;产生一个MCU复位。 窗口看门狗WWDG其实和独立看门狗类似&#xff0c;它是一个7位递减计数器不断的往…

Vue3在Element UI 表格中自定义时间格式化显示

Vue3在Element UI 表格中自定义时间格式化显示 一、前言1、准备工作2、实现步骤1. 引入 Element UI 组件2. 自定义时间格式化函数3. 格式化日期逻辑 3、完整示例4、结论 一、前言 在开发 Web 应用程序时&#xff0c;常常需要在表格中展示时间数据。Element UI 是一个流行的 Vu…

【Python】 如何在Python中创建GUID UUID

基本原理 GUID&#xff08;全局唯一标识符&#xff09;和UUID&#xff08;通用唯一标识符&#xff09;都是用来在分布式系统中唯一标识信息的。在Python中&#xff0c;我们可以使用内置的uuid模块来生成这些唯一标识符。 UUID有几种不同的版本&#xff0c;每种版本都有其特定…

软考-必须要背的内容

一、设计模式 1、创建型 抽象工厂&#xff1a;提供一个接口&#xff0c;创建一系列的相关相互依赖的对象&#xff0c;无需指定具体的类&#xff1b; eg&#xff1a;系统软件&#xff0c;支持多种数据库 生成器&#xff1a;将一个复杂类的表示与构造相分离&#xff0c;使得相…

Scrapy顺序执行多个爬虫

Scrapy顺序执行多个爬虫 有两种方式&#xff1a; 第一种&#xff1a;bat方式运行 新建bat文件 cd C:\python_web\spiders\tiktokSelenium & C: & scrapy crawl spider1 & scrapy crawl spider2 & scrapy crawl spider3 & scrapy crawl spider4 第二种&a…

IOS开发者证书快捷申请

App Uploader 在进行iOS应用开发中,可以借助appuploader辅助工具进行证书制作、上传和安装测试等操作。首先,您需要访问官方网站获取最新版本的appuploader。最新版本已经优化了与Apple账号的登录流程,无需支付688元,并提供了Windows版和Mac版供用户选择。下载完成后,解压…