java方法重载和参数类型自动提升方式

 更新时间:2022年02月15日 10:12:14   作者:..xh  
这篇文章主要介绍了java方法重载和参数类型自动提升方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

方法重载和参数类型自动提升

方法重载的意思是

一个类中可以由多个方法具有相同的名字,但这些方法的参数必须不同,

参数不同是指满足下列之一:

  • 参数的个数不同
  • 参数的个数相同,但参数列表中对相应的某个参数的类型不同

对于基本类型数据而言

参数类型存在自动提升

以byte a = 1为例,存在如下自动提升方式:

byte–> short–> int --> long --> float --> double --> Integer -->Object

java基本类型重载

1.重载

java允许在一个类中,多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载

2.基本类型重载

基本类型能从一个较小的类型自动提升至一个较大的类型,此过程涉及重载时,可能会造成一些混淆。

3.代码示例

public class Test { 
    /**
     * 测试涉及基本类型的重载
     */
    public static void main(String[] args) {        
        System.out.print("char类型重载:");
        char x='x';
        f1(x);f2(x);f3(x);  
        System.out.print("byte类型重载:");
        byte y=0;
        f1(y);f2(y);f3(y);
        System.out.print("short类型重载:");
        short z=0;
        f1(z);f2(z);f3(z);f4(z);            
    }
    public static void f1(char x){System.out.print("f1(char)");}
    public static void f1(byte x){System.out.print("f1(byte)");}
    public static void f1(short x){System.out.print("f1(short)");}
    public static void f1(int x){System.out.print("f1(int)");}
    public static void f1(long x){System.out.print("f1(long)");}
    public static void f1(float x){System.out.print("f1(float)");}
    public static void f1(double x){System.out.print("f1(double)");}    
    
    public static void f2(short x){System.out.print("f2(short)");}
    public static void f2(int x){System.out.print("f2(int)");}
    public static void f2(long x){System.out.print("f2(long)");}
    public static void f2(float x){System.out.print("f2(float)");}
    public static void f2(double x){System.out.print("f2(double)");}    
    
    public static void f3(int x){System.out.print("f3(int)");}
    public static void f3(long x){System.out.print("f3(long)");}
    public static void f3(float x){System.out.print("f3(float)");}
    public static void f3(double x){System.out.print("f3(double)");}    
    public static void f4(long x){System.out.print("f4(long)");}
}

输出:

char类型重载:f1(char)f2(int)f3(int)
byte类型重载:f1(byte)f2(short)f3(int)
short类型重载:f1(short)f2(short)f3(int)f4(long)

结论:

1)如果传入的数据类型小于方法中声明的形参类型,实际数据就会被提升。

2)char类型有所不同,如果无法恰好找到char参数的方法,但是int参数方法存在时,char直接提升至int型。

3)反过来,如果传入的实际参数大,而形式参数类型小,则需要通过强制类型转换(窄化转化),否则编译器报错。

4.重载解析过程

1)根据调用的方法名,查找是否有定义好的同名方法,如果没有就会报错 

2)比较形参和实参的数目是否相等,如果没有则会报错。如果有一个或多个方法符合条件,这些方法进入候选集 

3)与候选集中的方法比较参数表,如果对应位置上的每个参数类型完全匹配,或者可以通过扩展转换相匹配,则该方法称为可行方法,并入可行集。若不存在可行方法,则会报错 

4)在可行集中按照下面的原则选取最佳可行方法

5.可行集获取的原则

1)若每一个参数都可以完全匹配,它就是最佳可行方法 

2)若某个方法的每一个参数都不比别的方法差,且至少有一个参数比别的方法好,它就是最佳可行方法,这里的差和好是指,完全匹配要比扩展转化好,不过同样是扩展转换,仍然存在好喝差的问题,扩展转换有两条路径 

byte-short-int-long-float-double 

char-int-long-float-double 

这两条路径中位于左边的类型都可以转换为右边的类型,不过源类型与目标类型的距离越近,则这种转化就越好。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java集合之CopyOnWriteArrayList详解

    Java集合之CopyOnWriteArrayList详解

    这篇文章主要介绍了Java集合之CopyOnWriteArrayList详解,CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉老数组,这样保证了只阻塞写操作,需要的朋友可以参考下
    2023-12-12
  • java括号匹配问题介绍

    java括号匹配问题介绍

    大家好,本篇文章主要讲的是java括号匹配问题介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • IDEA2022.1创建maven项目规避idea2022新建maven项目卡死无反应问题

    IDEA2022.1创建maven项目规避idea2022新建maven项目卡死无反应问题

    这篇文章主要介绍了IDEA2022.1创建maven项目规避idea2022新建maven项目卡死无反应问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Java实现Map集合二级联动示例

    Java实现Map集合二级联动示例

    Java实现Map集合二级联动示例,需要的朋友可以参考下
    2014-03-03
  • java jvm两种存储区的类型知识点讲解

    java jvm两种存储区的类型知识点讲解

    在本篇文章里小编给大家整理的是一篇关于java jvm两种存储区的类型知识点讲解内容,有兴趣的朋友们可以学习下。
    2021-03-03
  • 使用Java代码实现RocketMQ的生产与消费消息

    使用Java代码实现RocketMQ的生产与消费消息

    这篇文章介绍一下其他的小组件以及使用Java代码实现生产者对消息的生成,消费者消费消息等知识点,并通过代码示例介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-07-07
  • MyBatis如何实现流式查询的示例代码

    MyBatis如何实现流式查询的示例代码

    这篇文章主要介绍了MyBatis 如何实现流式查询的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • MyBatis SqlMapConfig.xml配置

    MyBatis SqlMapConfig.xml配置

    MyBatis 的核心配置文件SqlMapConfig.xml,接下来通过本文给大家介绍MyBatis SqlMapConfig.xml配置,非常不错,感兴趣的朋友一起学习吧
    2016-08-08
  • MyBatis加载映射文件和动态代理的实现

    MyBatis加载映射文件和动态代理的实现

    本文主要介绍了MyBatis加载映射文件和动态代理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • 深入了解Java接口回调机制

    深入了解Java接口回调机制

    这篇文章主要介绍了Java接口回调机制,下面我们来一起学习一下吧
    2019-05-05

最新评论