当前位置: 首页 > news >正文

Java方法的重载

1问题

明明已经调用过了一个方法,但为什么又要去调用另一个方法?难道这个方法的名字不同吗?那又有什么关系呢?这些都是我们在学习和使用 java语言时要面对的问题。其实这里面最主要的问题还是在于重载的时候,不能保证每个方法都被正确调用。 当我们对同一个对象进行多次调用时,就会出现上面所说的情况。比如我们调用一个方法,当这个方法被调用次数达到一定程度后,这个方法就会被异常抛出了。对于这种情况, java中有一种非常经典的解决方案,那就是将这个方法进行重写。 重写也叫修改、替换或覆盖等。其基本思想是:对同一个对象或方法进行多次重复调用(即多次调用同一个参数)。这样做有两个好处:首先,由于每个重写后的方法都不同,所以不会出现一次重写就能把所有方法都重新做一遍的情况了;其次,由于每个重写后的方法都不同,所以不会出现某个重写后的方法被覆盖或调用时不能正常返回结果等问题。

2 方法

在多个方法中实现相同的功能,将其重写为不同的方法,可提高程序的可重用性。就可以避免一个方法多次被调用时,它的同名方法又要重新做一次。即在一个类中创建多个同名的子类,然后在这些子类中重写相同的方法。从实现上看,如果没有实现重载,那么就会出现同一个方法在不同的类中被重复调用的情况。由于在很多时候,我们所需要使用的方法不可能是只有一种类型的,因此我们可以通过重载来实现相同类型方法之间的互相调用。通过重写方法,就可以实现同类型方法之间的互相调用。 那么重写后的方法有什么不同呢?重写后方法和原类中同类方法所采用的关键字是一样的,在重新编译时被当作一个新类来对待。即同一个方法,在不同的类中被分别调用两次(如果是多个不同类中被重复调用)。因此我们可以说重写后的方法与原类是一样的。 具体实现如下: 上面这段代码中就实现了两个类之间同类型方法之间的重载,即: 以上代码中使用了“null”关键字来返回一个类型为 null、但其值为 false的异常状态代码段。由于这个异常状态是一个在程序运行过程中所不会出现和处理过的异常状态,因此我们在重新编译时会忽略掉这个异常状态代码段。但是在程序运行结束后,就会发现这个异常状态是一个真实存在、并且能处理掉这种异常状态代码段。 以上两个例子是典型的多个方法重写后实现相同功能、不同类之间被重写为相同类型、但其同名方法不同且其值也不同、但其名相同且其值不同这四种情况。对于这些情况,我们在实际编程时应该根据具体情况来确定哪个是第一种情况,哪个是第二种情况,然后再结合重载来选择相应代码段。

public static int add(int a, int b) {


return a + b;
}
public static double add(double a, double b) {
return a + b;
}
```
2. 判断一个字符串是否包含另一个字符串
```
public static boolean contains(String str, String subStr) {
return str.contains(subStr);
}
public static boolean containsIgnoreCase(String str, String subStr) {
return str.toLowerCase().contains(subStr.toLowerCase());
}
```
3. 获取数组中的最大值和最小值
```
public static int getMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
public static double getMax(double[] arr) {
double max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
public static int getMin(int[] arr) {
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
return min;
}
public static double getMin(double[] arr) {
double min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
return min;
}

3结语

通过上面的分析,我们已经知道了 java中方法重载的一些基本思想,以及它对我们开发人员带来的好处,那么我们应该如何正确使用这些方法呢?下面就简单谈一下我个人的理解和看法。 首先,对于一个 Java类而言,它必须要有一个或多个方法来实现它的功能。那么问题来了,一个 Java类到底应该有多少个方法呢?对于这个问题, Java语言的设计者是这样规定的:如果没有定义一个方法名为 static的类,那么 Java类应该有8个以上方法(或者方法名中至少包含4个数字);如果没有定义一个方法名为 static的类,那么 Java类应该有20个以上方法(或者方法名中至少包含5个数字)。 其次,对于一个需要多个线程来运行的代码而言,应该给每个线程都分配一个名字为 static的函数来实现它的功能。如果没有给每个线程分配这个函数,那么这些线程都会对同一个 static函数进行调用,那么将会出现问题:当多个线程对同一个 static函数进行调用时,程序就会崩溃。 最后,对于一个需要用到多个文件夹来存储数据的代码而言。

http://www.cnnetsun.cn/news/77169.html

相关文章:

  • 36、编程中的运算符、bc计算器与数组使用指南
  • 雀魂数据分析终极指南:如何用牌谱屋3周提升段位?
  • 解锁船舶设计新维度:开源船舶设计软件的实战应用指南
  • 5大脚本工具实战:让ESP32 AI助手开发效率飙升90%
  • 1、深入了解Solaris 10:从操作系统基础到实践操作
  • 3、Solaris 系统启动与关机操作全解析
  • 15、Solaris高级安装方法全解析
  • OpenModScan工业通讯调试全攻略:从入门到精通
  • CIDR合并工具终极指南:简单快速管理IP地址
  • 桌面宠物终极选择指南:从使用场景到性能实测的完整决策方案
  • MQTT Explorer:可视化你的MQTT网络世界
  • ML307 4G模块:xiaozhi-esp32移动网络终极接入方案
  • 树莓派系统烧录神器:Raspberry Pi Imager 5大实战技巧全解析
  • 开源Android输入法终极选择:OpenBoard完全使用指南
  • ExoPlayer状态恢复黑科技:告别进度丢失的终极指南
  • Foliate电子书阅读器:重新定义数字时代的阅读艺术
  • 36、系统管理工具与网络技术实用指南
  • JavaScript反混淆终极指南:快速处理Obfuscator混淆代码的完整教程
  • 2、探索 PC - BSD:开源操作系统的新选择
  • 11、PC-BSD系统常见操作与设置指南
  • 微信自动化技术探秘:打造智能微信机器人的完整指南
  • WinUtil插件开发深度实战:从零构建高效系统工具
  • Obsidian Zotero集成:科研工作流自动化的完整指南
  • 探索Unitree RL Gym强化学习的无限可能:从仿真到实体的智能机器人进化之路
  • 38、搭建Web和FTP服务及数据备份与恢复指南
  • 5分钟上手OCAT:让OpenCore配置变得像玩游戏一样简单![特殊字符]
  • CSS网格生成器:可视化布局设计的终极解决方案
  • JPEGView:重新定义极简图像浏览体验的5个关键特性
  • 终极指南:在Vue项目中快速集成轻量级Markdown编辑器
  • 24、在 Fedora 系统中搭建 Web 和 FTP 服务