动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

java方法重载知识详解

07-16 17:37 250浏览
举报 T字号
  • 大字
  • 中字
  • 小字

Java方法重载是一种编程技术,它允许开发人员在相同的类中使用相同的方法名称多次,但使用不同的参数。在这种情况下,我们说该方法是重载的。

1显示了一个方法,其参数在数量,类型和顺序上有所不同。三种类型的方法重载

Number of parameters:

public class Calculator {

   void calculate(int number1, int number2) { }

   void calculate(int number1, int number2, int number3) { }

}

 

Type of parameters:

public class Calculator {

   void calculate(int number1, int number2) { }

   void calculate(double number1, double number2) { }

}

 

Order of parameters:

public class Calculator {

   void calculate(double number1, int number2) { }

   void calculate(int number1, double number2) { }

}

1中,我们可以看到原始类型int和double。我们将进一步处理这些类型和其他类型,因此我们需要花一点时间来回顾Java中的原始类型。

重载不仅能使代码更整洁,更易于阅读,还可以帮助我们避免程序中的错误。相较于1中,想象一个程序,你有多种calculate()方法,用的名字,如calculate1, calculate2 calculate3。这样看起来似乎不好重载calculate()方法使可以使用相同的方法名称,而仅更改需要更改的内容:参数。找到重载的方法也很容易,因为它们通常在代码中组合在一起。

请注意,更改变量的名称不会导致重载。以下代码无法编译:

public class Calculator {

 

void calculate(int firstNumber, int secondNumber){}

 

void calculate(int secondNumber, int thirdNumber){}

 

}

我们也不能通过更改方法签名中的返回类型来重载方法。以下代码也不编译:

public class Calculator {

    double calculate(int number1, int number2){return 0.0;}

    long calculate(int number1, int number2){return 0;}

}

我们可以像使用方法一样重载构造函数:

public class Calculator {

private int number1;

private int number2;

 

public Calculator(int number1) {this.number1 = number1;}

 

public Calculator(int number1, int number2) {

this.number1 = number1;

this.number2 = number2;

}

 

}

首先,JVM是聪明的懒惰者:它将始终尽最大的努力来执行一种方法。因此,在考虑JVM如何处理重载时,请记住以下三种重要的编译器技术:

1.加宽

2.装箱(自动装箱和拆箱)

3.瓦拉格斯

如果从未遇到过这三种技术,那么一些示例应该可以帮助您将它们弄清楚。请注意,JVM 按照给定的顺序执行它们。

这是加宽的示例:

int primitiveIntNumber = 5;

 double primitiveDoubleNumber = primitiveIntNumber ;

扩展时,这是原始类型的顺序:

这是自动装箱的示例:

int primitiveIntNumber = 7;

 Integer wrapperIntegerNumber = primitiveIntNumber;

请注意在编译此代码后在后台发生的情况:

Integer wrapperIntegerNumber = Integer.valueOf(primitiveIntNumber);

这是拆箱的示例  

Integer wrapperIntegerNumber = 7;

 int primitiveIntNumber= wrapperIntegerNumber;

这是编译此代码后在后台发生的事情:

int primitiveIntNumber = wrapperIntegerNumber.intValue();

这是可变参数的一个例子; 请注意,这varargs始终是最后执行的时间:

execute(int… numbers){}

当我们直接将数字1传递给executeAction方法时,JVM会自动将其视为int。这就是为什么数字不符合executeAction(short var)方法的原因。

同样,如果传递数字1.0,则JVM会自动将该数字识别为double。当然,数字1.0也可以是float,但是类型是预定义的。这就是executeAction(double var)2中调用该方法的原因。

当我们使用Double包装器类型时,有两种可能性:包装器号可以拆箱为原始类型,也可以扩展为Object。(请记住,Java中的每个类都扩展了Object该类。)在这种情况下,JVM选择将Double类型扩展为an,Object因为它比拆箱要花更少的精力,正如之前解释的那样。我们传递的最后一个数字是1L,并且由于这次我们指定了变量类型,因此它是long。

对于需要相同方法名称和不同参数的方案,重载是一项非常强大的技术。这是一种有用的技术,因为在代码中使用正确的名称对可读性有很大的影响。我们可以简单地重载它,而不是复制方法并给代码增加混乱。这样做可以使代码保持整洁和易于阅读,并减少了重复方法破坏系统某些部分的风险。

最后,有兴趣的同学可以通过观看本站的专业java视频课程来了解更多关于重载的实例和用法,更深入的学习知识只在你一念之间。

 

0人推荐
共同学习,写下你的评论
0条评论
轻言绕指柔
程序员轻言绕指柔

14篇文章贡献84145字

作者相关文章更多>

推荐相关文章更多>

Java数据结构

HelloWorld10-31 08:24

浅谈MySQL中SQL优化的常用方法

军哥08-12 23:29

五分钟读懂UML类图

江湖人称小李白12-10 10:41

MyBatis开发框架的四大核心

IT逐梦者08-17 21:43

一次搞定continue,break和return

HelloWorld11-06 11:19

发评论

举报

0/150

取消