Null作为参数的时候,Java编译器如何调用函数?
public class TestNull {
public void method(Object o){
System.out.println("Object Version");
}
public void method(String s){
System.out.println("String Version");
}
public static void main(String[] args) {
TestNull tn= new TestNull();
tn.method(null);
}
}
编译可以通过,运行结果如下:

那么,Null作为参数的时候究竟如何调用函数?回答这个问题之前,先来看看其他例子。
public class TestCallMethod2 {
void test(Object s){ System.out.println("Object version");}
void test(TestCallMethod2 t){System.out.println("TestCallMethod2 version");}
void test(SubTestCallMthod2 t){System.out.println("SubTestCallMethod version");}
//void test(String s){System.out.println("String version");}
public static void main(String[] args) {
TestCallMethod2 t = new TestCallMethod2();
t.test(null);
t.test(new Object());
}
}
class SubTestCallMthod2 extends TestCallMethod2{}

通过上述代码可以知道,4个test()函数,当null作为实参进行调用的时候,会根据继承的关系,调用最底层子类的test()函数,当第四个test()方法不注释的时候,由于String类型和TestCallMethod2两个类同属于Object子类,同时存在兄弟类的test()方法,则会出现编译错误。
————————————————————————————————扩展——————————————————————————————————————————
public interface GrandFather {}
public interface Father extends GrandFather {}
public interface Son extends Father {}
public class TestInterface implements GrandFather,Father,Son{
public void test(GrandFather g){System.out.println("GrandFather version");}
public void test(Father f){System.out.println("Father version");}
public void test(Son s){System.out.println("Son version");}
public static void main(String[] args) {
TestInterface ti = new TestInterface();
ti.test(ti);
}
}
输出:Son version。
Null作为参数的时候,Java编译器如何调用函数?的更多相关文章
- Java -- JDBC 学习--调用函数&存储过程
调用函数&存储过程 /** * 如何使用 JDBC 调用存储在数据库中的函数或存储过程 */ @Test public void testCallableStatment() { Connec ...
- [Inside HotSpot] Java的方法调用
1. 方法调用模块入口 Java所有的方法调用都会经过JavaCalls模块.该模块又细分为call_virtual调用虚函数,call_static调用静态函数等.虚函数调用会根据对象类型进行方法决 ...
- Day04:函数参数、对象、嵌套、闭包函数和装饰器
上节课复习: 1.什么是函数 函数就是具备某一功能的工具 2.为何用函数 1.程序的组织结构和可读性 2.减少代码冗余 3.扩展性强 ...
- 转!!Java中关于Null的9个解释(Java Null详解)
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- 打印class文件的Java编译器内部的版本号
当改变了jdk版本时,在编译java时,会遇到Unsupported major.minor version错误.错误信息如下 : Unsupported major.minor version 50 ...
- (ecj)Eclipse的Java编译器分析之一——ecj介绍
Java是一个开放的平台,对于除发布编译器/解释器/基础类库之外,该语言的负责机构更多的是制定一系列标准,任何符合标准的厂商产品均可用于市场投放.甚至包括其编译器及解释器. (比如Hibernate提 ...
- JVM总结-Java语法糖与Java编译器
自动装箱与自动拆箱 首先要提到的便是 Java 的自动装箱(auto-boxing)和自动拆箱(auto-unboxing). 我们知道,Java 语言拥有 8 个基本类型,每个基本类型都有对应的包装 ...
- Atitit.通过null 参数 反射 动态反推方法调用
Atitit.通过null 参数 反射 动态反推方法调用 此时,直接使用java apache的ref工具都失效了.必须要自己实现了. 如果调用接口方法的话,就不能使用apache的ref工具,可 ...
- Java编译器API简介
今天给大家分享的是Java编译器API简介,文章部分内容摘自[优锐课]学习笔记. Java编译器API Java编译器API是Java模块(称为java.compiler)的一部分.该模块包括语言模型 ...
随机推荐
- 机器学习: Viola-Jones 人脸检测算法解析(一)
在计算机视觉领域中,人脸检测或者物体检测一直是一个非常受关注的领域,而在人脸检测中,Viola-Jones人脸检测算法可以说是非常经典的一个算法,所有从事人脸检测研究的人,都会熟悉了解这个算法,Vio ...
- WPF中利用RadialGradient模拟放大镜效果
原文:WPF中利用RadialGradient模拟放大镜效果 --------------------------------------------------------------------- ...
- [WebGL入门]十一,着色器编译器和连接器
注意:文章翻译http://wgld.org/,原作者杉本雅広(doxas).文章中假设有我的额外说明.我会加上[lufy:].另外.鄙人webgl研究还不够深入.一些专业词语,假设翻译有误.欢迎大家 ...
- 好记性不如烂笔头88-spring3学习(9)-schema的配置的解读和说明
Spring1使用了DTD格式,spring2以后使用的是schema的格式:使用schema的格式,支持了不同类型的配置拥有了自己的命名空间,让配置文件有了更加好的扩展性. 不论什么事情,都是有利有 ...
- Gradle离线配置
原文:Gradle离线配置 1. 先在Gradle官网下载最新的离线zip压缩包. https://gradle.org/ 2. 将下载的zip压缩包,保存到本地磁盘下的目录中. 3. 修改(grad ...
- 苹果ios用js的Date()出现NaN问题解决办法
原文:苹果ios用js的Date()出现NaN问题解决办法 ios使用如下方法获得NaN,安卓手机则是正常计算,解决方法是换个这个时间的格式 new Date("2017-04-28 23: ...
- kettle设计器连接oracle RAC时的连接字符串
1.不需要填写主机名2.数据库名写如下连接字符串:(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = IP地址)(PORT = 1521))(CONNEC ...
- SQLDirect 6.5 Source (Delphi 5-10.1 Berlin)
Description:SQLDirect Component Library is a light-weight Borland Database Engine replacement for Bo ...
- nltk处理文本
nltk(Natural Language Toolkit)是处理文本的利器. 安装 pip install nltk 进入python命令行,键入nltk.download()可以下载nltk需要的 ...
- SSL Converter & Formats
https://www.sslshopper.com/ssl-converter.html PEM Format The PEM format is the most common format th ...