从初学者到专家:Java方法的完整指南

news2024/11/26 3:51:23

目录

一.方法的概念及使用

1.1什么是方法

1.2方法的定义

1.3方法的调用

 1.4实参和形参的关系

1.5没有返回值的方法

1.6方法的意义 

二.方法重载

2.1方法重载的实现

2.2方法重载的意义

2.3方法签名


 

 

一.方法的概念及使用

1.1什么是方法

方法就是一个代码片段. 类似于 C 语言中的 "函数",来实现特定的功能,我们输入相关代码进去到方法中,让方法帮我们完成功能。其中涉及到方法的定义,调用,执行。

举几个简单的例子:

  1. 烹饪食物:将烹饪食物比作一个方法。你有一个菜谱(方法定义),其中包含了烹饪特定菜肴的步骤。当你想要做同样的菜肴时,你可以根据菜谱的指导(调用方法)来准备食材、进行烹饪,并最终获得可口的菜肴。

  2. 打电话:将打电话比作一个方法。当你想要与某人进行通话时,你需要输入对方的电话号码(方法参数),然后按下拨号键(调用方法)。电话网路会连接你和对方,你可以进行交流并传递信息。

  3. 洗衣服:将洗衣服比作一个方法。当你需要清洗衣物时,你将衣物放入洗衣机中(方法参数),选择适当的程序和洗涤剂(方法调用),然后启动洗衣机(执行方法)。最终,你将得到干净的衣物。

在这些例子中,方法提供了一种可重复使用的方式来执行特定的任务。它们接受输入(参数),执行一系列操作,并产生输出(结果)。这样的抽象使得我们可以更有效地组织和重用我们的行动,就像在编程中使用方法一样。


1.2方法的定义

方法的定义由以下几个组成部分:

  1. 访问修饰符(Access Modifier):用于控制其他类是否可以访问该方法。常见的访问修饰符包括public、private、protected和默认(不使用任何修饰符)。

  2. 返回类型(Return Type):指定方法执行完后返回的数据类型。如果方法不返回任何值,可以使用关键字void。

  3. 方法名称(Method Name):用于唯一标识方法的名称。方法名应该具有描述性,能够清晰地表达方法的功能。

  4. 参数列表(Parameter List):指定方法接受的输入参数。参数是方法执行所需的数据,可以有多个参数,并且每个参数都有其数据类型和名称。

  5. 方法体(Method Body):包含实际的代码块,定义了方法要执行的操作。方法体由一对花括号{}包围,其中包含了一系列的语句和逻辑。

  6. 返回语句(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. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有回值,必须写成 void
3. 方法名字:采用小驼峰命名
4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
5. 方法体:方法内部要执行的语句
6. 在java当中,方法必须写在类当中
7. 在java当中,方法不能嵌套定义
8. 在java当中,没有方法声明一说

 

1.3方法的调用

调用一个方法,你需要按照以下格式编写代码:

返回值类型 变量名 = 方法名(参数列表);

具体步骤如下:

  1. 使用方法的返回值类型声明一个变量,该变量将用于存储方法的返回结果。如果方法没有返回值(即返回类型为void),则不需要声明变量。

  2. 在等号左侧的变量名处,给变量取一个合适的名称,以便在后续的代码中引用该变量。

  3. 在等号右侧,写上要调用的方法名,并在括号内传递方法所需的参数。根据方法的定义,确保传递正确的参数类型和数量。

  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和5
    System.out.println("Sum: " + result); // 打印结果:Sum: 8
}

输出代码如下: 

在上述示例中,我们定义了一个名为"calculateSum"的方法,用于计算两个整数的和。在主程序的main方法中,我们调用calculateSum方法,并传递参数3和5。方法执行后,返回结果8被赋值给result变量,并通过打印语句输出到控制台。 

 注意事项:

1.定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.
2.一个方法可以被多次调用.

 

 1.4实参和形参的关系

在方法的定义和调用中,有两种类型的参数:形式参数(形参)和实际参数(实参)。

  1. 形式参数(形参)是在方法定义中声明的参数,用于接收方法调用时传递的值。形参相当于方法内部的局部变量,只在方法内部有效。形参在方法定义时指定其数据类型和名称。
  2. 实际参数(实参)是在方法调用时传递给方法的具体值或变量。实参是根据方法定义中形参的顺序进行传递的,并且必须与形参的类型相匹配。实参可以是常量、变量或表达式的值。
  3. 当方法被调用时,实参的值会被传递给对应的形参。这样,在方法内部,形参就可以使用传递进来的实参值进行操作。

举一个生活的例子理解:

假设你有一家制造汽车的工厂,你有一个汽车生产线,用于生产汽车。在这个例子中:

- 形式参数(形参):汽车设计图纸和规格说明书。设计图纸和规格说明书中包含了汽车的尺寸、配件要求和装配顺序等信息,相当于方法定义中声明的参数。这些信息并不是实际的汽车,只是用来描述要生产的汽车。

- 实际参数(实参):你根据设计图纸和规格说明书实际生产的汽车。这些实际的汽车是你根据设计图纸和规格说明书进行加工和装配的,相当于方法调用时传递给方法的具体值或变量。你根据设计图纸和规格说明书,使用零件和装配工具将汽车逐步加工和组装,最终得到实际的汽车。

当你将设计图纸和规格说明书交给工人时,他们会根据这些信息开始生产汽车。他们会根据设计图纸上的尺寸和配件要求,按照规定的装配顺序,使用实际的零件和工具进行加工和装配。在这个过程中,设计图纸和规格说明书充当了形参,而实际生产的汽车充当了实参。工人根据实际的设计图纸和规格说明书来进行加工和装配,最终生产出实际的汽车。

如下图:

 

还是举回上面的例子

// 定义一个名为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和5
    System.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
可以看到,在 swap 函数交换之后,形参 x y 的值发生了改变,但是 main 方法中 a b 还是交换之前的值,即没有交换成功。为什么呢?
因为  实参 a b main 方法中的两个变量,其空间在 main 方法的栈 ( 一块特殊的内存空间 ) 中,而形参 x y swap 方法中 的两个变量,x y 的空间在 swap 方法运行时的栈中,因此:实参 a b 与 形参 x y 是两个没有任何关联性的变量, swap 方法调用时,只是将实参 a b 中的值拷贝了一份传递给了形参 x y ,因此对形参 x y 操作不会对实参 a b 产生任何影响。

 


1.5没有返回值的方法

没有返回值的方法是指在方法定义中,方法声明的返回类型为`void`,表示该方法不返回任何值。

public void printMessage(String message) {
    System.out.println(message);
}

在上述示例中,`printMessage`是一个没有返回值的方法。它接受一个字符串形参“message”,并将该字符串打印到控制台上。

当调用没有返回值的方法时,方法内部执行相应的操作,但不会返回任何值给调用者。在上述例子中,当调用`printMessage`方法并传递一个字符串实参时,方法会打印该字符串,但不会返回任何结果。

没有返回值的方法通常用于执行某些操作或完成特定任务,而无需返回结果。例如,打印信息、更新数据、发送通知等。这样的方法对程序的执行起到了一种"副作用"的作用,即修改了程序状态或执行了特定的操作,但不产生可用于后续计算的返回值。

在调用没有返回值的方法时,通常仅关注方法执行的效果,而不需要接收方法的返回结果。

注意:

  1. 形参的名字可以随意取,对方法都没有任何影响
  2. 形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值
  3. 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方法重载的意义

  1. 提高代码可读性和可维护性

  2. 优化代码结构和设计

  3. 方便调用和使用

  4. 提高代码的兼容性

总之:方法重载在面向对象编程中具有重要的意义,它提供了更灵活、可读性更高、可维护性更好的代码编写方式,使得代码的设计和调用更加方便和易于理解。


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反汇编工具查看,具体操作:

1. 先对工程进行编译生成 .class 字节码文件
2. 在控制台中进入到要查看的 .class 所在的目录
3. 输入: javap -v 字节码文件名字即可 

 

方法签名中的一些特殊符号说明:

 


 

好了,到这里就结束了,如果有什么错误的地方请在评论区指出,谢谢。

创作不易,如果可以的的话,请大家多三连支持一下下。虎杖悠仁同学会很赞同的。

 

 

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

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

相关文章

21款美规奔驰GLS450更换中规高配主机,汉化操作更简单

很多平行进口的奔驰GLS都有这么一个问题,原车的地图在国内定位不了,语音交互功能也识别不了中文,原厂记录仪也减少了,使用起来也是很不方便的。 可以实现以下功能: ①中国地图 ②语音小助手(你好&#xf…

内网ip与外网ip

一、关于IP地址 我们平时直接接触最多的是内网IP。而且还可以自己手动修改ip地址。而外网ip,我们很少直接接触,都是间接接触、因为外网ip一般都是运营商管理,而且是全球唯一的,一般我们自己是无法修改的。 内网IP和外网IP是指在…

线程间三种常见的通信手段

线程间通信是指多个线程之间通过某种机制进行协调和交互,例如:线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中有以下三种实现线程等待的手段 : Object 类提供的 wait(),notify() 和 notifyAll() 方法;C…

Python实现SSA智能麻雀搜索算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种新型的群智能优化算法,在2020年提出&a…

新能源电动汽车充电桩控制主板结构组成

你是否好奇过,充电桩主板到底是由哪些部分组成的?又分别是做什么的?今天我们就来一探究竟。 充电桩主板是充电桩的核心部件,它由中央处理器、内存、辅助存储器、输入/输出接口等组成。 中央处理器是充电桩主板的核心,它负责将充电桩的读写指…

vue里搜索框实现防抖功能

进来调用一个闭包函数debounce(),赋值给一个变量debounceFunc,(包闭的功能就是说里面的变量timer和参数一直驻留在函数里面) input事件调用一个函数debounceFunc(),并且传一个回调searchs函数&a…

MATLAB 2023a的机器学习、深度学习实践应用

MATLAB 2023版的深度学习工具箱,提供了完整的工具链,使您能够在一个集成的环境中进行深度学习的建模、训练和部署。与Python相比,MATLAB的语法简洁、易于上手,无需繁琐的配置和安装,让您能够更快地实现深度学习的任务。…

深入理解 go协程 调度机制

Thread VS Groutine 这里主要介绍一下Go的并发协程相比于传统的线程 的不同点: 创建时默认的stack大小 JDK5 以后Java thread stack默认大小为1MC 的thread stack 默认大小为8MGrountine 的 Stack初始化大小为2K 所以Grountine 大批量创建的时候速度会更快 和 …

plt取消坐标轴刻度、自定义取消绘图边框(或坐标轴)、白边处理、自定义颜色图谱、设置坐标轴刻度朝向

目录 1、取消坐标轴刻度 2、自定义取消绘图边框(或坐标轴) 3、去掉图片周边白边 4、自定义颜色图谱 5、设置坐标轴刻度朝向 import matplotlib.pyplot as plt 1、取消坐标轴刻度 ax plt.subplot() ax.set_xticks([]) ax.set_yticks([]) 2、自定…

redis分布式集群-redis+keepalived+ haproxy

redis分布式集群架构(RedisKeepalivedHaproxy)至少需要3台服务器、6个节点,一台服务器2个节点。 redis分布式集群架构中的每台服务器都使用六个端口来实现多路复用,最终实现主从热备、负载均衡、秒级切换的目标。 redis分布式集…

基于SpringBoot的旅游网站的设计与实现【附ppt|开题|万字文档(LW)和搭建文档

主要功能 前台界面: ①首页、旅游线路推荐、旅游资讯、线路搜索、查看更多等 ②旅游线路、度假旅游、探险考察、文化旅游、短程旅游、观光旅游、远程旅游、最新路线等 ③添加购物车、立即购买、评论、点我收藏等 ④个人中心、我的订单、我的地址、我的收藏、客服等…

vue实现a组件中数据变化b组件实时更新(ab组件无关联)

需求:A组件新增、编辑或者删除数据时,B组件实时更新数据 // src/utils/bus.js// bus.$emit(bridge-updated) 是在事件总线实例 bus 上触发了一个自定义事件 // data-updated,相当于发布了一个事件。// bus.$on(bridge-update…

考研算法44天:玛雅人的密码

题目前置知识 1.为啥BFS比DFS更加适合找最短路径? BFS 的使用场景:层序遍历、最短路径问题 - 知乎 (zhihu.com) 题目原题 解题思路 这道题和原先写的那些题目不同的是,这次BFS所搜索的树里面存放的是一个字符串,也就是说没有路…

SQL server中substring 的用法

一:substring函数是SQL中截取字段数据中的其中一部分 --列:提取abdcsef中的abc数据,使用substring实现select substring(abdcsef,1,3) --‘1’表示截取的起始位置是从第一个字符开始,‘3’表示截取后得到的字符串长度为3个字符 二&#xff1…

day7 ADC模数转换

ADC简介 作用:采集传感器的数据,测量输入电压,检查电池电量剩余,检测温湿度等。 ADC性能指标 量程:能测量的电压范围 分辨率:ADC的分辨率通常以二进制数的位数表示,位数越多,分辨…

腾讯面试题:使用Redis分布式锁可能会出现哪些问题?

嗨大家好,我是你们的小米!今天要和大家聊一个有趣的话题,那就是“腾讯面试题:使用Redis做分布式锁可能会出现哪些问题?”没错,就是腾讯大佬们在面试时经常会问到的一个问题,我们来一起深入了解一…

ubuntu中安装python

最简单方便的是 apt 使用第三方的 ppa 源,然后直接 apt 安装 python3.9 安装 software-properties-common 获取add-apt-repository命令:apt install -y software-properties-common添加第三方的 ppa 源:add-apt-repository ppa:deadsnakes/p…

【下班神器】python写自动关机程序并打包成exe文件

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 不知道你们有没有过这种体验,下班时给电脑关机结果误点成重启, 又或者工作到还剩十几分钟快要下班了,老板突然说要开会。 会议结束后,还要等到电脑关机才能回家。 是不是就…

SQL- 每日一题【1327. 列出指定时间段内所有的下单产品】

题目 表: Products 表: Orders 写一个解决方案,要求获取在 2020 年 2 月份下单的数量不少于 100 的产品的名字和数目。 返回结果表单的 顺序无要求 。 查询结果的格式如下。 示例 1: 解题思路 1.题目要求我们获取在 2020 年 2 月份下单的数量不少于 100 的产品的…

录取查询系统自己怎么做?需要用到哪些技术?

作为一名老师,我深知学生及家长们对于录取情况的关注和期待。因此,学校公布录取情况表是非常重要的一项工作。在这篇文章中,我将分享学校公布录取情况表的步骤和流程,帮助大家更好地了解录取情况。 学校在录取过程结束后&#xf…