Java重载函数,当参数为null时,调用的处理
2016-11-10 10:05
197 查看
精确性原则
关于以下程序的输出结果:public class TestNull { public void show(String a){ System.out.println("String"); } public void show(Object o){ System.out.println("Object"); } public static void main(String args[]){ TestMain t = new TestMain(); t.show(null); } }输出结果为:
string
解释:主要是重载函数或构造函数调用时精确性的问题。
java是强类型语言,就是使用的时候要明确类型,如果不明确的话,编译器会帮你做,它会调用他认为最合适的那个,编译器也是程序,也是按照预先的规则执行。
Java的重载解析过程是以两阶段运行的。第一阶段 选取所有可获得并且可应用的方法或构造器。第二阶段在第一阶段选取的方法或构造器中选取最精确的一个。如果一个方法或构造器可以接受传递给另一个方法或构 造器的任何参数,那么我们就说第一个方法比第二个方法缺乏精确性。
在我们的程序中,两个构造器都是可获得 并且可应用的。构造器Confusing(Object)可以接受任何传递给Confusing(double[ ])的参数,因此Confusing(Object)相对缺乏精确性。(每一个double数组都是一个Object,但是每一个Object并不一定是 一个double数组。)因此,最精确的构造器就是Confusing(double[ ]),这也就解释了为什么程序会产生这样的输出。
理解本谜题的关键在于在测试哪一个方法或构造器最精确。
要想用一个null参数来调用 Confusing(Object)构造器,你需要这样写代码:new Confusing((Object)null)。
相关文章推荐
- 关于java重载函数,参数为null时,调用的处理。(精确性原则)
- 关于java重载函数,参数为null时,调用的处理。(精确性原则)
- 关于java重载函数,参数为null时,调用的处理 (精确性原则)
- 关于java重载函数,参数为null时,调用的处理。(精确性原则)
- 关于java重载函数,参数为null时,调用的处理 (精确性原则)
- java调用存储过程 中DATE参数的处理
- java 利用jacob调用ocx控件时怎么处理带返回值的参数?
- JNI:Java调用C/C++-传递空值(null)的处理方法
- Kotlin调用java中的回调方法,参数为null的异常
- java webservice调用中参数null的问题
- java调用Kotlin方法的参数为null异常问题
- JNI:Java调用C/C++-传递空值(null)的处理方法
- 解决 -- java 调用webservice 服务端收到参数为null
- Java重载,当参数为null时,调用情况
- 润乾报表在websphere8部署配置数据源报错 java.sql.SQLException: 调用中无效的参数DSRA0010E: SQL 状态 = null,错误代码 = 17,433 而失败
- java调用oracle存储过程传入参数为数组的处理
- java.sql.SQLException: 调用中无效的参数DSRA0010E: SQL 状态 = null,错误代码 = 17,433
- 调用Win32 API如何处理指针类型的参数(一)
- dwr例子2调用有简单参数的java方法
- C#关于参数为null(空值)的方法调用,重载顺序选择彻底研究