初学java常见问题:Java方法的重载是咋回事?
lipiwang 2024-10-21 09:02 6 浏览 0 评论
前言
小千在之前给大家讲解构造方法的时候说过,在一个类中,可以定义多个构造方法,这叫做方法的重载!但是关于方法重载,具有有哪些要求和细节?很多小白还并不清楚,所以在今天的这篇文章中,小千给大家详细说说方法重载相关的内容。
全文大约 【1800】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考
一. 方法重载
1. 概念
所谓方法的重(chong)载(重复出现),就是指在一个类中可以有多个名称相同但参数不同的方法,不过方法重载与返回值的类型无关。在Java中,无论是普通方法,还是构造方法,都可以进行重载。我们在调用重载的方法时,会根据传递的参数不同,来执行不同的方法。
通过方法的重载,我们就可以把一系列功能相似,但参数不同的方法,用同一个方法名进行定义。这样就避免了出现繁多的方法名,如果我们每次新建一个方法,就取个新的方法名,就会降低程序的可读性。使用同一个方法名称,我们就很容易记住这些方法,使用起来就很方便灵活。
2. 要求
根据方法重载的概念可知,方法重载时有如下要求:
- 同名不同参(参数类型、个数、顺序);
- 与返回值、访问修饰符无关。
也就是说,方法重载时,要求方法的名称相同,但参数不同,只要参数的类型、个数、顺序有一个地方不同即可。但方法的重载与返回值和使用的访问修饰符没有关系!
我们可以自己进行重载方法的定义,当然java源码中也有大量的重载方法,比如我们常见的String类中就有,如下图所示:
比如String字符串中就定义了多个indexOf()和lastIndexOf()重载方法,当然也有其他的重载方法。这些方法名称相同,但参数肯定不同,和返回值没有关系!
说了这么多之后,接下来还是让我们通过一些案例看看方法的重载怎么实现吧。
二. 代码案例
1. 普通方法重载
接下来我们设计一个案例,用于比较两个数字的大小。我们在比较两个数值时,数值的类型是不固定的,可能是两个int类型的数值,也可能是两个double类型的数值,也可能是两个double、一个int类型的数值......在这种情况下,我们就可以使用方法的重载来实现数值之间的比较。具体实现代码参考如下:
public class Demo01 {
public static void main(String[] args) {
Demo01 demo=new Demo01();
int max01 = demo.max(10, 20);
System.out.println("较大的整数是:"+max01);
float max02 = demo.max(20.0f, 39.8f);
System.out.println("较大的单精度数是:"+max02);
double max03 = demo.max(22.88, 10.88);
System.out.println("较大的双精度数是:"+max03);
double max04 = demo.max(44.88, 5);
System.out.println("较大的双精度数是:"+max04);
}
// 输出较大的那个整数
public int max(int a, int b) {
// 采用三目运算符进行简化判断
return a >= b ? a : b;
}
// 输出较大的那个单精度数
public float max(float a, float b) {
// 采用三目运算符进行简化判断
return a >= b ? a : b;
}
// 输出较大的那个单精度数
public double max(double a, double b) {
// 采用三目运算符进行简化判断
return a >= b ? a : b;
}
//定义一个私有的方法,该方法的两个参数类型不同,这同样也属于方法重载。
private double max(double a, int b) {
// 采用三目运算符进行简化判断
return a >= b ? a : b;
}
}
以上代码,编译、运行都是完全没问题的。虽然3个max()方法名称相同,但它们的形参列表不同,所以系统可以正常区分出这3个方法。在运行时,Java虚拟机会根据传递过来的不同参数来调用不同的方法。
2. 构造方法重载
除了普通方法可以重载之外,构造方法也可以重载。但是我们要注意,构造方法没有返回值。
public class Car {
// 汽车品牌
public String logo;
// 汽车颜色
private String color;
// 汽车价格
private double price;
// 无参构造方法
public Car() {
System.out.println("汽车类...");
}
// 有参构造方法
public Car(String logo) {
System.out.println("汽车类...logo=" + logo);
}
// 有参构造方法
public Car(String logo, String color) {
System.out.println("汽车类...logo=" + logo + ",color=" + color);
}
// 有参构造方法
public Car(String logo, String color, double price) {
System.out.println("汽车类...logo=" + logo + ",color=" + color + ",price=" + price);
}
}
我们在构造Car汽车类对象时,可以如下所示:
public class Demo02 {
public static void main(String[] args) {
Car car1 = new Car();
Car car2 = new Car("奥迪A6");
Car car3 = new Car("奥迪A6", "黑色");
Car car4 = new Car("奥迪A6", "黑色", 50.0);
}
}
这样通过传入不同的参数,就可以构造出不同的汽车对象。
三. 结语
至此,小千就把方法重载相关的内容讲解完毕了,现在你知道哪些情况属于方法重载了吗?方法重载要点如下:
●方法重载是指同一类中有多个方法的名称相同,但参数不同;
●重载的方法功能都类似,比如String的indexOf()方法;
●重载方法的返回值类型尽量要相同。
往期推荐阅读:
相关推荐
- 如何在 Linux 中压缩文件和目录?(linux压缩文件夹到指定目录)
-
在Linux系统中,文件和目录的压缩是一项常见且重要的操作。无论是为了节省存储空间、便于文件传输,还是进行备份管理,掌握压缩技术都能极大地提升工作效率。Linux中常用的压缩工具1.tar:打...
- 什么是LIM模具?与普通硅胶模具有何本质区别?
-
要深入理解LIM模具及其与普通硅胶模具的本质区别,需从成型逻辑、技术架构、应用价值三个层面拆解,以下是系统性解析:一、LIM模具:定义与核心技术1.定义LIM模具(LiquidInj...
- 前后端安全机制(前后端分离安全的token)
-
一、密钥安全管理方案1.动态密钥分发机制密钥与会话绑定后端为每个用户会话生成临时密钥(如AES-256密钥),通过HTTPS加密传输给前端,会话结束后自动失效。例如:javascript//...
- Switch 2芯片细节曝光,英伟达专门定制支持DLSS,网友:掌机模式相当于PS4
-
Switch2处理器,细节被实锤!数毛社(DigitalFoundry)消息,已经确定Switch2采用的是英伟达真·定制版芯片,包含8核CPU和12GBLPDDR5X内存。GPU则基于Amp...
- 独立站的PageSpeed Insights 指标在seo中的作用?
-
这是一个非常关键的问题,关于独立站(如Shopify、WordPress、自建FastAPI/Vue等网站)的PageSpeedInsights指标(Google的网页性能评分工具)在...
- 前端工程化-webpack 分包的方式有哪些?
-
Webpack的分包(CodeSplitting)是优化应用性能的重要手段,主要通过合理拆分代码减少首次加载体积、提升缓存利用率。以下是常见的分包方式及生产/开发环境配置建议:一、Webpack...
- 液态硅胶(LSR)套啤注塑件的关键技术难点与解决方案?
-
液态硅胶(LSR)套啤注塑件(即二次注塑成型,一次成型基材+二次LSR包胶)在医疗、电子、汽车等领域应用广泛,但其关键技术难点需从材料、模具、工艺等多维度突破。以下是核心难点及解决方案:一、关...
- spa首屏加载慢怎样解决(spa首屏优化)
-
SPA(SinglePageApplication,单页应用)首屏加载慢是一个常见问题,主要原因通常是首次加载需要拉取体积较大的JavaScript文件、样式表、初始化数据等。以下是一些常见的...
- 揭秘|为什么新华三(H3C)要自主研发运维管理软件?
-
1概述1.1产生背景随着互联网技术的快速发展,企业对计算、网络的需求也越来越大。为了保证整个数据系统可靠、稳定地运行,相关企业对运维系统的要求越来越高,运维成本也在随之逐步增加。H3C公司自主研发的运...
- 动态主机配置协议——DHCP详解(dhcp动态主机配置协议的功能是?)
-
一、DHCP简介DHCP(DynamicHostConfigurationProtocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会...
- OGG同步到Kafka(oggforbigdata到kafka)
-
目的:测试使用OGG将数据单向同步到Kafka上。简要说明:Kafka使用单节点单Broker部署;单独部署简单ZooKeeper;需要使用到JAVA1.8;OGG需要2个版本,一个fororacl...
- Zabbix入门操作指南(zabbix4.0使用手册)
-
上篇:安装与配置一.概述在开始之前,一些概念和定义需要我们提前了解一下(以下内容摘自官方网站)。1.1几个概念架构Zabbix由几个主要的功能组件组成,其职责如下所示。ServerZabbixs...
- 绝对干货!升级MySQL5.7到MySQL8.0的最佳实践分享
-
一、前言事出必有因,在这个月的某个项目中,我们面临了一项重要任务,即每年一次的等保测评整改。这次测评的重点是Mysql的一些高危漏洞,客户要求我们无论如何必须解决这些漏洞。尽管我们感到无奈,但为了满足...
- pytorch v2.7.0震撼发布!Blackwell GPU支持+编译性能狂飙,AI开发
-
重点内容测试版(Beta):oTorch.Compile支持Torch函数模式oMega缓存原型(Prototype):o支持NVIDIABlackwell架构oPyTorch...
- kubernetes1.31.3集群搭建(上)(kubectl连接集群)
-
1集群规划1.1物理机环境电脑操作系统CPU内存硬盘网卡IP地址(静态)虚拟机软件服务器操作系统联想Windows11Intel12900K24核128GB4TBPcIE4.0无线网卡192...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)