从初学者到专家:Java方法的完整指南
目录
一.方法的概念及使用
1.1什么是方法
1.2方法的定义
1.3方法的调用
1.4实参和形参的关系
1.5没有返回值的方法
1.6方法的意义
二.方法重载
2.1方法重载的实现
2.2方法重载的意义
2.3方法签名


一.方法的概念及使用
1.1什么是方法
方法就是一个代码片段. 类似于 C 语言中的 "函数",来实现特定的功能,我们输入相关代码进去到方法中,让方法帮我们完成功能。其中涉及到方法的定义,调用,执行。
举几个简单的例子:
-
烹饪食物:将烹饪食物比作一个方法。你有一个菜谱(方法定义),其中包含了烹饪特定菜肴的步骤。当你想要做同样的菜肴时,你可以根据菜谱的指导(调用方法)来准备食材、进行烹饪,并最终获得可口的菜肴。
-
打电话:将打电话比作一个方法。当你想要与某人进行通话时,你需要输入对方的电话号码(方法参数),然后按下拨号键(调用方法)。电话网路会连接你和对方,你可以进行交流并传递信息。
-
洗衣服:将洗衣服比作一个方法。当你需要清洗衣物时,你将衣物放入洗衣机中(方法参数),选择适当的程序和洗涤剂(方法调用),然后启动洗衣机(执行方法)。最终,你将得到干净的衣物。
在这些例子中,方法提供了一种可重复使用的方式来执行特定的任务。它们接受输入(参数),执行一系列操作,并产生输出(结果)。这样的抽象使得我们可以更有效地组织和重用我们的行动,就像在编程中使用方法一样。
1.2方法的定义
方法的定义由以下几个组成部分:
-
访问修饰符(Access Modifier):用于控制其他类是否可以访问该方法。常见的访问修饰符包括public、private、protected和默认(不使用任何修饰符)。
-
返回类型(Return Type):指定方法执行完后返回的数据类型。如果方法不返回任何值,可以使用关键字void。
-
方法名称(Method Name):用于唯一标识方法的名称。方法名应该具有描述性,能够清晰地表达方法的功能。
-
参数列表(Parameter List):指定方法接受的输入参数。参数是方法执行所需的数据,可以有多个参数,并且每个参数都有其数据类型和名称。
-
方法体(Method Body):包含实际的代码块,定义了方法要执行的操作。方法体由一对花括号{}包围,其中包含了一系列的语句和逻辑。
-
返回语句(Return Statement):如果方法有返回类型,它可以使用return语句将结果返回给调用者。return语句也可以提前终止方法的执行。
在代码块实现是这样:
// 方法定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
} 比如一个简单的代码:
public int Sum(int num1, int num2) {int sum = num1 + num2;return sum;} 在上述例子中,方法名为"Sum",返回类型为int(返回整数)。它有两个参数num1和num2,都是整数类型。方法体中的代码将num1和num2相加,将结果存储在sum变量中,并使用return语句返回sum的值。
注意事项:
1. 修饰符:现阶段直接使用public static 固定搭配2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有回值,必须写成 void3. 方法名字:采用小驼峰命名4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开5. 方法体:方法内部要执行的语句6. 在java当中,方法必须写在类当中7. 在java当中,方法不能嵌套定义8. 在java当中,没有方法声明一说
1.3方法的调用
调用一个方法,你需要按照以下格式编写代码:
返回值类型 变量名 = 方法名(参数列表);
具体步骤如下:
-
使用方法的返回值类型声明一个变量,该变量将用于存储方法的返回结果。如果方法没有返回值(即返回类型为void),则不需要声明变量。
-
在等号左侧的变量名处,给变量取一个合适的名称,以便在后续的代码中引用该变量。
-
在等号右侧,写上要调用的方法名,并在括号内传递方法所需的参数。根据方法的定义,确保传递正确的参数类型和数量。
-
调用方法后,方法将执行其定义的操作,并返回一个结果(如果有返回值)。
简单的代码示例如下:求两数之和
// 定义一个名为Sum的方法,计算两个整数的和
public static int calculateSum(int num1, int num2) {int sum = num1 + num2;return sum;
}// 在主程序中调用Sum方法
public static void main(String[] args) {int result = calculateSum(3, 5); // 调用calculateSum方法,并传入参数3和5System.out.println("Sum: " + result); // 打印结果:Sum: 8
}
输出代码如下:

在上述示例中,我们定义了一个名为"calculateSum"的方法,用于计算两个整数的和。在主程序的main方法中,我们调用calculateSum方法,并传递参数3和5。方法执行后,返回结果8被赋值给result变量,并通过打印语句输出到控制台。
注意事项:
1.定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.2.一个方法可以被多次调用.
1.4实参和形参的关系
在方法的定义和调用中,有两种类型的参数:形式参数(形参)和实际参数(实参)。
- 形式参数(形参)是在方法定义中声明的参数,用于接收方法调用时传递的值。形参相当于方法内部的局部变量,只在方法内部有效。形参在方法定义时指定其数据类型和名称。
- 实际参数(实参)是在方法调用时传递给方法的具体值或变量。实参是根据方法定义中形参的顺序进行传递的,并且必须与形参的类型相匹配。实参可以是常量、变量或表达式的值。
- 当方法被调用时,实参的值会被传递给对应的形参。这样,在方法内部,形参就可以使用传递进来的实参值进行操作。
举一个生活的例子理解:
假设你有一家制造汽车的工厂,你有一个汽车生产线,用于生产汽车。在这个例子中:
- 形式参数(形参):汽车设计图纸和规格说明书。设计图纸和规格说明书中包含了汽车的尺寸、配件要求和装配顺序等信息,相当于方法定义中声明的参数。这些信息并不是实际的汽车,只是用来描述要生产的汽车。
- 实际参数(实参):你根据设计图纸和规格说明书实际生产的汽车。这些实际的汽车是你根据设计图纸和规格说明书进行加工和装配的,相当于方法调用时传递给方法的具体值或变量。你根据设计图纸和规格说明书,使用零件和装配工具将汽车逐步加工和组装,最终得到实际的汽车。
当你将设计图纸和规格说明书交给工人时,他们会根据这些信息开始生产汽车。他们会根据设计图纸上的尺寸和配件要求,按照规定的装配顺序,使用实际的零件和工具进行加工和装配。在这个过程中,设计图纸和规格说明书充当了形参,而实际生产的汽车充当了实参。工人根据实际的设计图纸和规格说明书来进行加工和装配,最终生产出实际的汽车。
如下图:

还是举回上面的例子
// 定义一个名为Sum的方法,计算两个整数的和
public static int calculateSum(int num1, int num2) {int sum = num1 + num2;return sum;
}// 在主程序中调用Sum方法
public static void main(String[] args) {int result = calculateSum(3, 5); // 调用calculateSum方法,并传入参数3和5System.out.println("Sum: " + result); // 打印结果:Sum: 8
}
定义的calculatesSum方法中,num1 和num2是形参,主函数main中调用时存放的两个数字3,5就是实参。
实参的值永远都是拷贝到形参中,形参和实参本质是两个实体。
用一段代码解释 :交换两个整数
public class TestMethod {
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);}
}
// 运行结果
swap: x = 20 y = 10
main: a = 10 b = 20
1.5没有返回值的方法
没有返回值的方法是指在方法定义中,方法声明的返回类型为`void`,表示该方法不返回任何值。
public void printMessage(String message) {System.out.println(message);
}
在上述示例中,`printMessage`是一个没有返回值的方法。它接受一个字符串形参“message”,并将该字符串打印到控制台上。
当调用没有返回值的方法时,方法内部执行相应的操作,但不会返回任何值给调用者。在上述例子中,当调用`printMessage`方法并传递一个字符串实参时,方法会打印该字符串,但不会返回任何结果。
没有返回值的方法通常用于执行某些操作或完成特定任务,而无需返回结果。例如,打印信息、更新数据、发送通知等。这样的方法对程序的执行起到了一种"副作用"的作用,即修改了程序状态或执行了特定的操作,但不产生可用于后续计算的返回值。
在调用没有返回值的方法时,通常仅关注方法执行的效果,而不需要接收方法的返回结果。
注意:
- 形参的名字可以随意取,对方法都没有任何影响
形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。 在 Java 中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体
1.6方法的意义
1. 模块化和代码复用:方法将一系列相关的操作封装在一起,形成一个独立的模块。这有助于提高代码的可读性、可维护性和可重用性。
2. 抽象和封装:方法允许开发人员将程序的逻辑和实现细节隐藏在方法内部,只暴露必要的接口和功能给外部调用者。
3. 提高代码的可维护性和可读性:通过使用方法,将代码分解成多个小的、独立的功能块,使得代码更易于理解和维护。
4. 提高代码的灵活性和可扩展性:方法可以接受参数并返回结果,使得代码能够根据不同的输入产生不同的输出。
5. 实现面向对象的特性:方法是面向对象编程的基本构建块之一。通过方法,可以实现封装、继承和多态等面向对象的特性。
总之,方法在面向对象编程中具有重要的意义。它们帮助我们将代码组织成模块化、可维护和可复用的单元,提高了代码的可读性、可扩展性和可维护性。方法也是实现面向对象的特性的基础,使得我们能够更好地利用面向对象编程的优势。
二.方法重载
2.1方法重载的实现
方法重载是指在同一个类中定义多个方法,它们具有相同的名称但拥有不同的参数列表。通过方法重载,可以根据不同的参数类型和数量来调用相应的方法,从而实现相似功能的多个方法。
举例代码如下:
public class Calculator {public static 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的方法,它们具有相同的名称但参数列表不同。第一个add方法接收两个整数作为参数,并返回它们的和。第二个add方法接收两个双精度浮点数作为参数,并返回它们的和。第三个add方法接收三个整数作为参数,并返回它们的和。
通过方法重载,我们可以根据需要选择合适的方法来执行相加操作。例如:
Calculator calculator = new Calculator();
int result1 = calculator.add(2, 3); // 调用第一个add方法,返回5
double result2 = calculator.add(2.5, 3.5); // 调用第二个add方法,返回6.0
int result3 = calculator.add(2, 3, 4); // 调用第三个add方法,返回9
通过传递不同的参数类型和数量,我们可以正确地调用适合的方法,实现了根据不同参数进行加法操作的灵活性。
注意:
1. 方法名必须相同2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)3. 与返回值类型是否相同无关// 注意:两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的 public class TestMethod { public static void main(String[] args) {int a = 10;int b = 20;int ret = add(a, b);System.out.println("ret = " + ret); }public static int add(int x, int y) {return x + y; }public static double add(int x, int y) {return x + y; }} // 编译出错 Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int) public static double add(int x, int y) {^ 1 个错误
2.2方法重载的意义
-
提高代码可读性和可维护性
-
优化代码结构和设计
-
方便调用和使用
-
提高代码的兼容性
总之:方法重载在面向对象编程中具有重要的意义,它提供了更灵活、可读性更高、可维护性更好的代码编写方式,使得代码的设计和调用更加方便和易于理解。
2.3方法签名
我们知道,在Java中,在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就可以定义方法名相同的方法呢?
这就涉及到方法签名:经过编译器编译修改过之后方法最终的名字。
具体方式: 方法全路径名 + 参数列表 + 返回值类型,构成 方法完整的名字。
比如以下代码:
public class TestMethod {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) {add(1,2);add(1.5, 2.5);}
}
上述代码经过编译之后,然后使用JDK自带的javap反汇编工具查看,具体操作:
方法签名中的一些特殊符号说明:
好了,到这里就结束了,如果有什么错误的地方请在评论区指出,谢谢。
创作不易,如果可以的的话,请大家多三连支持一下下。虎杖悠仁同学会很赞同的。

相关文章:
从初学者到专家:Java方法的完整指南
目录 一.方法的概念及使用 1.1什么是方法 1.2方法的定义 1.3方法的调用 1.4实参和形参的关系 1.5没有返回值的方法 1.6方法的意义 二.方法重载 2.1方法重载的实现 2.2方法重载的意义 2.3方法签名 一.方法的概念及使用 1.1什么是方法 方法就是一个代码片段. 类似于 …...
【生成式AI】ProlificDreamer论文阅读
ProlificDreamer 论文阅读 Project指路:https://ml.cs.tsinghua.edu.cn/prolificdreamer/ 论文简介:截止2023/8/10,text-to-3D的baseline SOTA,提出了VSD优化方法 前置芝士:text-to-3D任务简介 text-to-3D Problem text-to-3D…...
C++元编程——模拟javascript异步执行
javascript有一个期约调用,就是利用内部的一种协程机制实现的类似并行的操作。以下是用ChatGPT搞出来的一块演示代码: // 异步任务 function asyncTask() {return new Promise((resolve, reject) > {setTimeout(() > {const randomNumber Math.f…...
【JavaEE】懒人的福音-MyBatis框架—复杂的操作-动态SQL
【JavaEE】MyBatis框架要点总结(3) 文章目录 【JavaEE】MyBatis框架要点总结(3)1. 多表查询1.1 映射表resultMap1.2 只有部分属性跨表查询1.2.1 依照常规去写代码1.2.2 用标签去实现接口 1.3 分多步的解决方案1.4 与多线程的结合 …...
Springboot 默认路径说明
Spring Boot基本上是Spring框架的扩展,它消除了设置Spring应用程序所需的样板配置,极大的方便了开发者,其默认识别路径如下: Spring Boot 作为Spring默认将 /** 所有访问映射到以下目录: 1、classpath:/static 用于加…...
springboot注册拦截器与返回统一标准响应格式
响应对象ResultVO package com.example.poi.utils;import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;/*** A…...
卷王特斯拉又全网降价了,卷死车企们
哈喽,大家好,今天媒介盒子小编又来跟大家分享软文推广的干货知识了,本篇分享的主要内容是:特斯无孔不入的营销手段。 1、特斯拉Model Y降价 车企要打架 自2023 年 8 月 14 日起,Model Y 长续航版起售价从 31.39 万元调整为 29.99 万元,Mode…...
wiley:revision 流程
1 上传修改后的word文件 注意:包括没标注修改位置的word文件和标注了修改位置的word文件 2 上传response回复文件 Your Author Response should include relevant comments that you have copied from the decision letter, along with your comments detailing …...
【论文阅读】基于深度学习的时序预测——Pyraformer
系列文章链接 论文一:2020 Informer:长时序数据预测 论文二:2021 Autoformer:长序列数据预测 论文三:2022 FEDformer:长序列数据预测 论文四:2022 Non-Stationary Transformers:非平…...
玩转IndexedDB,比localStorage、cookie还要强大的网页端本地缓存
随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的大小不超过 4K…...
RedisDesktopManager连不上redis问题解决(小白版)
常见问题就是 redis.conf配置文件 a.将port 127.0.0.1这一行注释掉 b.protected-mode保护模式改为no 这个可以看到很多博主都说了,相信都搜到这里来了你们都弄了,我就不详细说了 防火墙开放端口 我说明我自己的问题以及解决方法 1、执行telnet 虚拟…...
蓝帽杯 取证2022
网站取证 网站取证_1 下载附件 并解压 得到了一个文件以及一个压缩包 解压压缩包 用火绒查病毒 发现后门 打开文件路径之后 发现了一句话木马 解出flag 网站取证_2 让找数据库链接的明文密码 打开www文件找找 查看数据库配置文件/application/database.php(CodeI…...
MyBatis and or使用列表控制or条件
背景:最近项目需要,师傅可以查找订单,而师傅是指定可以服务2到3个区域,故需要使用到and, or条件的组合,以下记一下代码。 最重要的代码是: 1、构建List<Consumer<LambdaQueryWrapper<T>>&g…...
C语言刷题训练【第11天】
大家好,我是纪宁。 今天是C语言笔试刷题训练的第11天,加油! 文章目录 1、声明以下变量,则表达式: ch/i (f*d – i) 的结果类型为( )2、关于代码的说法正确的是( )3、已知有如下各变…...
正则表达式的使用
1、正则表达式-教程 正则表达式:文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为元字符)。 正则表达式使用单个字符串来描述,匹配一系列匹配某个句法规则的字符串。 2、…...
PHP 求解两字符串所有公共子序列及最长公共子序列 支持多字节字符串
/*** 获取两字符串所有公共子序列【不连续的】 例:abc ac > ac** param string $str1 字符串1* param string $str2 字符串2** return array*/ function public_sequence(string $str1, string $str2): array {$data [[-1, -1, , 0, ]]; // 子序列容器【横坐标 …...
linux内核bitmap之setbit汇编实现
内核版本:kernel 0.12 首先看一段代码,下面这段代码来自内核版本0.12的mm/swap.c中: // mm/swap.c #define bitop(name,op) \static inline int name(char * addr,unsigned int nr) \ { \int __res; \__asm__ __volatile__("bt" …...
Golang设计模式
Golang设计模式 Golang设计模式简介Golang工厂设计模式Golang单例设计模式Golang抽象工厂设计模式Golang建造者模式 (Builder Pattern)Golang 原型模式(Prototype Pattern)Golang适配器模式Golang 桥接模式(Bridge Pattern)Golang装饰器模式(Decorator …...
leetcode151. 反转字符串中的单词
题目:leetcode151. 反转字符串中的单词 描述: 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结…...
【BASH】回顾与知识点梳理(十七)
【BASH】回顾与知识点梳理 十七 十七. 什么是 Shell scripts17.1 干嘛学习 shell scripts自动化管理的重要依据追踪与管理系统的重要工作简单入侵检测功能连续指令单一化简易的数据处理跨平台支持与学习历程较短 17.2 第一支 script 的撰写与执行撰写第一支 script 17.3 撰写 s…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
