Null作为参数的时候,Java编译器如何调用函数?

 1 public class TestNull {
 2     public void method(Object o){
 3         System.out.println("Object Version");
 4     }
 5
 6     public void method(String s){
 7         System.out.println("String Version");
 8     }
 9
10     public static void main(String[] args) {
11         TestNull tn= new TestNull();
12         tn.method(null);
13     }
14
15 }

   编译可以通过,运行结果如下:

  那么,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()方法,则会出现编译错误。

时间: 2025-01-07 18:47:35

Null作为参数的时候,Java编译器如何调用函数?的相关文章

菠菜网站函数参数传入和菠菜平台重复调用函数的搭建使用方法

原创摘要:菠菜网站函数参数传入和菠菜平台重复调用函数的搭建使用详细方法菠菜网站函数参数BCfrom sys import argv#利用sys.argv传入参数,argv是一个BC网参数列表listscript,file_name,input_encoding,errors = argv def main(language_file,encoding,errors):#主函数参数print(">>>>main",repr(language_file),encod

C 可变长参数运用-----编写Lua的通用调用函数

1.C可变长参数 printf这个使用频繁的C语言函数的参数列表包含一个const char*的描述串,还有一个可变长参数(...) ,如下为printf的函数声明. int printf(const char * __restrict, ...) 在stdarg.h这个头文件中包含着对可变长参数进行操作的一些宏(x86平台为例): #define va_start(ap,v)( ap = (va_list)&v + _INTSIZEOF(v) ) #define va_arg(ap,t) ( 

java.sql.SQLException: 调用中无效的参数DSRA0010E: SQL 状态 = null,错误代码 = 17,433

在节点 cnshh171Node01 上的服务器 server1 上,对数据源 testj2cbug 执行的测试连接操作由于以下异常 java.sql.SQLException: 调用中无效的参数DSRA0010E: SQL 状态 = null,错误代码 = 17,433 而失败. 查看 JVM 日志 JVM 日志: java.sql.SQLException: invalid arguments in call DSRA0010E: SQL State = null, Error Code =

转!!Java中关于Null的9个解释(Java Null详解)

对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认为Java发明者知道null与它解决的问题相比带来了更多的麻烦,但是null仍然陪伴着Java. 我越发感到惊奇,因为java的设计原理是为了简化事情,那就是为什么没有浪费时间在指针.操作符重载.多继承实现的原因,null却与此正好相反.好吧,我真的不知道这个问题的答案,我知道的是不管null被Ja

针对Properties中实时性要求不高的配置参数,用Java缓存起来

Properties常用于项目中参数的配置,当项目中某段程序需要获取动态参数时,就从Properties中读取该参数,使程序是可配置的.灵活的. 有些配置参数要求立即生效,有些则未必: 一.实时性要求非常高.项目中,有些参数要求实时性非常高,即在系统运行中,IT人员修改了该参数值,该新参数值要求立即在程序中生效: 二.实时性要求不高.其实,并不是每个配置参数都要求实时性那么高,有些配置参数基本不会在项目运行当中修改,或即使在运行当中修改,也只要求其在下一次项目启动时生效. 针对第二种情况,鉴于程

Spring3.2 Contorller单元测试参数问题: java.lang.NoSuchMethodException

使用3.2做单元测试的时候发现这个问题,因为之前都是用3.0中的配置适配器使用AnnotationMethodHandlerAdapter,到3.2中升级为RequestMappingHandlerAdapter: 运行之前的单元测试发现报异常:java.lang.NoSuchMethodException,看了一下堆栈发现反射调用的方法签名明显不对,于是看了一下调用的代码, 之前是:handlerAdapter.handle(request, response,  new HandlerMet

java编译器不匹配问题(java compiler level does not match the version of the installed java project facet)

问题:项目经常copy过来,经常会报说Java编译器不匹配 解决方法:找到项目所在的目录,在.settings子目录里面,用文本编辑器打开org.eclipse.wst.common.project.facet.core.xml

警惕Java编译器中那些“蜜糖”陷阱

一.前言 随着Java编译器不断地向前发展,它为程序员们提供了越来越多的“蜜糖”(compiler suger),极大地方便了程序的开发,例如,foreach的增强模式,自动拆箱与装箱以及字符串的连接操作...... 这些"蜜糖"带给我们很多的便利,但是也存在着一些陷阱. 二.自动拆装箱陷阱 首先我们来看看大家最为熟悉的自动拆装箱(boxing),boxing可以自动帮我们完成基本类型和基本类型包裹器之间的转换. 具体使用方法可以参考有名的Java Gossip(http://open

值不能为 null。 参数名: source

今天调试程序总是报一个异常: 值不能为 null.参数名: source 异常详细信息: System.ArgumentNullException: 值不能为 null.参数名: source 通过断点发现是这段代码错误,发生这个异常通常是方法中某个参数为空了,而我的方法中没有一个名为source的参数啊,后来发现是 processors 为 NULL ,调用 Select 方法当然会出错. processors = taskWfService.IdentifyNextWorkflowProce