Java 方法的特性详解

news/2024/9/19 4:51:54/ 标签: java, python, 开发语言

目录

一、引言

二、方法的重载

(一)定义与作用

(二)判断方法相同的标准

三、可变个数形参的方法

(一)使用场景

(二)格式与特点

(三)代码示例

四、方法的值传递机制

(一)基本数据类型的传递

(二)引用数据类型的传递

(三)代码示例

五、递归方法

(一)定义与类型

(二)使用说明

(三)代码示例

六、总结


一、引言

在 Java 编程中,方法的重载、可变个数形参以及值传递机制等特性是非常重要的概念。它们为我们提供了更加灵活和强大的编程手段,使得代码更加简洁、可读和可维护。本文将详细介绍这些特性,并通过代码示例帮助读者更好地理解它们的实际应用。

二、方法的重载

(一)定义与作用

  1. 定义:在同一个类中,允许有同名的方法,只要他们的参数列表不同即可。满足这样特征的多个方法,彼此构成方法的重载。
  2. 作用:方法重载可以让程序员在同一个类中定义多个功能相似但参数不同的方法,提高代码的可读性和可维护性。例如,可以定义多个同名的加法方法,分别用于不同类型的参数,如两个整数相加、两个浮点数相加、两个字符串拼接等。

(二)判断方法相同的标准

如何判断两个方法相同呢?方法名相同,且形参列表相同。这里的形参列表相同包括参数的个数、类型和顺序都相同。例如,以下两个方法是相同的:

java">public void add(int a, int b) {System.out.println(a + b);
}public void add(int x, int y) {System.out.println(x + y);
}

三、可变个数形参的方法

(一)使用场景

在调用方法时,可能会出现形参的类型是确定的,但是参数的个数不确定。此时,我们可以使用可变个数形参的方法。例如,一个方法用于计算多个整数的和,但是不知道具体会有多少个整数作为参数传入。

(二)格式与特点

  1. 格式:参数类型... 参数名。例如,public void sum(int... nums)表示一个可以接受任意个数整数参数的方法。
  2. 特点
    • 可变个数形参的个数可以为 0 个、1 个、2 个等。
    • 可变个数形参的方法与同一个类中,同名的多个方法之间可以构成重载。
    • 特例:可变个数形参的方法与同一个类中方法名相同,且与可变个数形参的类型相同的数组参数不构成重载。
    • 可变形参个数的声明必须要在形参列表的最后。
    • 可变个数的形参最多在一个方法的形参列表中出现一次。

(三)代码示例

java">public class VariableArgsExample {public void printNumbers(int... nums) {for (int num : nums) {System.out.print(num + " ");}System.out.println();}public void printStrings(String str, int... nums) {System.out.println(str);for (int num : nums) {System.out.print(num + " ");}System.out.println();}
}

四、方法的值传递机制

(一)基本数据类型的传递

对于方法内声明的局部变量来说,如果是基本数据类型的变量,则将此变量保存的数据值传递出去。当实参给形参赋值时,如果形参是基本数据类型变量,则将实参保存的数据值传递给形参。这种传递方式是值传递,即形参的改变不会影响实参的值。

(二)引用数据类型的传递

如果是引用数据类型的变量,则将此变量保存的地址值传递出去。当实参给形参赋值时,如果形参是引用数据类型变量,则将实参保存的地址值赋给形参。这种传递方式也是值传递,但是由于传递的是地址值,所以形参的改变可能会影响实参所指向的对象的值。

(三)代码示例

java">public class ValueTransferExample {public static void changeInt(int num) {num = 100;}public static void changeArray(int[] arr) {arr[0] = 100;}public static void main(String[] args) {int a = 10;changeInt(a);System.out.println(a); // 输出 10,说明基本数据类型的传递不会影响实参的值int[] array = {1, 2, 3};changeArray(array);System.out.println(array[0]); // 输出 100,说明引用数据类型的传递可能会影响实参所指向的对象的值}
}

五、递归方法

(一)定义与类型

  1. 定义:方法自己调用自己的现象就叫递归。
  2. 类型
    • 直接递归:方法直接调用自身。
    • 间接递归:方法通过调用其他方法间接调用自身。

(二)使用说明

  1. 递归方法包含了一种隐式的循环。它会重复执行某段代码,但这种重复执行无需循环控制。
  2. 递归一定要向已知方向递归,否则就变成无穷递归。例如,计算阶乘的递归方法,当参数为 1 或 0 时,直接返回 1,这就是已知方向。
  3. 递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢得多,所以使用递归要谨慎。
  4. 在要求高性能的情况下避免使用递归,递归调用花时间又耗内存,考虑使用循环迭代。

(三)代码示例

java">public class RecursionExample {public static int factorial(int n) {if (n == 0 || n == 1) {return 1;} else {return n * factorial(n - 1);}}
}

六、总结

方法的重载、可变个数形参的方法、值传递机制以及递归方法是 Java 编程中非常重要的特性。它们为我们提供了更加灵活和强大的编程手段,使得代码更加简洁、可读和可维护。在实际编程中,我们应该根据具体的需求合理地使用这些特性,以提高代码的质量和效率。


http://www.ppmy.cn/news/1521036.html

相关文章

【大模型】llama系列模型基础

前言:llama基于transformer架构,与GPT相似,只用了transformer的解码器部分。本文主要是关于llama,llama2和llama3的结构解读。 目录 1. llama1.1 整体结构1.2 RoPE1.3 SwiGLU 激活函数 2. llama22.2 GQA架构2.3 RLHF 3. llama3参考…

ubuntu20.04(wsl2)测试 arcface 人脸识别(计算特征向量)

1. 参考博客和代码、模型仓库: 1.1. 【C随记】collect2: error: ld returned 1 exit status错误分析与解决 1.2. Visual Studio 2022新建 cmake 工程测试 tensorRT 自带样例 sampleOnnxMNIST 1.3.报错:ModuleNotFoundError: No module named ‘ten…

力扣SQL仅数据库(570-579)

570. 至少有5名直接下属的经理 需求: 编写一个解决方案,找出至少有五个直接下属的经理 数据准备: Create table If Not Exists Employee (id int, name varchar(255), department varchar(255), managerId int) Truncate table Employee i…

Mysql梳理1——数据库概述(上)

笔记来源:【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】 https://www.bilibili.com/video/BV1iq4y1u7vj 目录 11.2 引入 11.2. 1 数据库与数据库管理系统 11.2.2 数据库与数据库管理系统的关系 11.2.…

nnunetv2(一)配置文件和nnUNetv2_convert_MSD_dataset命令

文章目录 setup.pypyproject.tomlconfiguration.pynnUNetv2_convert_MSD_dataset 如有错误,欢迎评论 setup.py 可以使用pip install .命令来安装nnunet v2 pyproject.toml 配置文件 [project] name "nnunetv2" # 项目名称 version "2.5" # …

jmeter中响应时间、TPS、服务器资源图表

插件下载可以参考前面文章:相关插件 一、响应时间图表 jmeter中的聚合报告已经足够显示响应时间,但是不会显示很详细,下面使用监听器中的插件查看, 添加后,可以不用更改任何配置,直接使用默认即可统计响应…

vue3 + ts + element ui plus 添加阿里图标库图标(只添加一个, 并引入)

先创建一个vue文件, 引入svg代码, 这个文件放components里也挺好 ** catalogIcon.vue代码如下: ** <template><svg t"1725419972935" class"icon" viewBox"0 0 1024 1024" version"1.1" xmlns"http://www.w3.org/20…

深度学习--机器学习相关(3)

1.K-近邻算法 KNN 听起来像是某种神经网络的名字&#xff0c;如RNN、CNN 等&#xff0c;其实不然&#xff0c;这是一种经典、简单的分类算法K- 近邻算法(K-Nearest Neighbor,KNN)。与无监督学习讲解的聚类算法不同&#xff0c;KNN 是一个有监督算法。 有监督学习是一种学习算…

多目标应用:四种多目标优化算法(NSGA2、NSPSO、NSDBO、NSCOA)求解柔性作业车间调度问题(FJSP),MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题(Flexible Job Scheduling Problem, FJSP) 的描述如下&#xff1a;n个工件 { J , J 2 , . . , J n } \{J,J_2,..,J_n\} {J,J2​,..,Jn​}要在 m m m 台机器 { M 1 , M 2 , . . , M m } \{M_1,M_2,..,M_m\} {M1​,M2​,..,Mm​} …

div3 970

Problem - D - Codeforces 关键在于如果是环的话&#xff0c;环中的每一个的值都是一样的 #include<bits/stdc.h> #define int long long using namespace std; signed main(){int nn;cin>>nn;while(nn--){int n;cin>>n;int a[n1],i0;while(i<n)cin>…

com.baomidou.mybatisplus.annotation.DbType 无法引入

com.baomidou.mybatisplus.annotation.DbType 无法引入爆红 解决 解决 ❤️ 3.4.1 是mybatis-plus版本&#xff0c;根据实际的配置→版本一致 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId>&…

达梦数据库的系统视图v$sysstat

达梦数据库的系统视图v$sysstat 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$SYSSTAT 视图提供了关于数据库系统性能和状态的一系列统计信息。这个视图是数据库管理员&#xff08;DBA&#xff09;用来监控和管理数据库性能的重要工具之一。它包含许多统计…

不管夫妻还是情人,想要长相厮守、生活幸福美满,就这两个字!

你好&#xff0c;我是腾阳。 近年来&#xff0c;娱乐圈频传“闪婚闪离”的消息&#xff0c;每一次都牵动着公众敏感的神经。 从光鲜亮丽的荧幕情侣到分道扬镳的路人&#xff0c;他们的故事如同一面镜子&#xff0c;映照出现代人情感关系的脆弱与浮躁。 相比之下&#xff0c;…

【Google Play】高德地图13.20.0.1451最新国际版(如何鉴别是否官方?)

高德地图&#xff0c;您的全方位出行助手&#xff0c;让您无论走到哪里都能熟悉一切。无论是寻找美食还是探索旅游景点&#xff0c;高德地图都能为您提供详尽的信息。有了高德地图在手&#xff0c;您可以轻松畅游世界各地&#xff0c;享受无忧无虑的旅行体验。 提供包括驾车、公…

基于 Konva 实现Web PPT 编辑器(二)

动画系统 为了实现演示中复杂的动画效果&#xff0c;使用 Animation 类统一管理&#xff1b;切换动画通过 css animation 实现&#xff0c;并且是应用在 konvajs-content 上&#xff0c;动画则通过 gsap 实现&#xff0c;应用在 Konva.Node 上&#xff0c;实现思路如下&#xf…

Python-FLASK上传文件

一、HTML文件 1、avator.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <form method"post" enctype"multipart/form-dat…

【游戏安全】CheatEngine基础使用——表面加密的原理、如何破解表面加密?如何解决每次关掉程序找到的属性都会消失这个问题?指针扫描

游戏安全 表面加密原理 指针扫描原理 表面加密 原理 从之前的文章中可以知道&#xff0c;这个游戏中是单浮点类型的数据&#xff0c;进行扫描后发现了这么多&#xff0c;对数据进行修改后看效果。 可以看到数据被改为999&#xff0c;这里消耗一次要500&#xff0c;所以点完之…

【Python 千题 —— 算法篇】词频统计

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 在日常开发和文本处理工作中,单词计数是一个非常基础但又极为重要的操作。无论是统计一篇文章的词频,还是分析一段文本的关键词,单词计数都起着关键作用…

AI语音机器人:通过 Azure Speech 实现类人类的交互

语音对话的重要性 在竞争日益激烈的客户互动领域&#xff0c;人工智能语音对话正成为重中之重。随着数字参与者的崛起&#xff0c;组织认识到语音机器人的强大力量&#xff0c;它是一种自然而直观的沟通方式&#xff0c;可以提供类似人类的体验&#xff0c;深度吸引用户&#…

Gin框架中的单个路由中间件:深入理解Next与Abort

Gin是一个高性能的Go语言Web框架&#xff0c;它提供了灵活的中间件机制来处理HTTP请求。在Gin中&#xff0c;中间件可以对请求进行预处理和后处理&#xff0c;而c.Next()和c.Abort()是控制请求处理流程的两个关键方法。本文将通过一个示例详细介绍这两个方法的使用和作用。 1.…