当前位置: 首页 > 面试题库 >

了解选择了哪个构造函数以及为什么

邓仲卿
2023-03-14
问题内容

为什么下面的每一次打印程序I'm string,而不是I'm object.I'm int.

public class Demo {

    public Demo(String s){
        System.out.println("I'm string");
    }

    public Demo(int i){
        System.out.println("I'm int.");
    }

    public Demo(Object o){
        System.out.println("I'm object.");
    }

    public static void main(String[] args) {
        new Demo(null);
    }
}

另外,如果我替换intIntegerThe constructor Demo(String) is ambiguous.为什么会给出错误?


问题答案:

null可以转换为Objector String,但不能转换为int。因此,第二个构造函数出局了。

在转换为Object或转换为之间String,转换String更为具体,因此就可以选择。

JLS
第15.12.2节介绍了方法重载解析,并且我相信相同的方法也可以用于构造函数解析。15.12.2.5节介绍了选择最具体的方法(在这种情况下为构造函数):

非正式的直觉是,如果第一个方法处理的任何调用都可以传递给另一个方法而没有编译时类型错误,则一个方法比另一个方法更具体。

关于使用Object或String参数进行构造函数调用的方法-处理的任何调用new Demo(String)也可以传递给new Demo(Object)编译器,而不会产生编译时类型错误,但反之 则不 成立,因此,new Demo(String)它更具体…因此由重载解析规则。



 类似资料:
  • 本文向大家介绍Python构造函数及解构函数介绍,包括了Python构造函数及解构函数介绍的使用技巧和注意事项,需要的朋友参考一下 python 有一个相应的特殊解构器(destructor)方法名为__del__()。然而,由于python具有垃圾对象回收机制(靠引用计数),这个函数要直到该实例对象所有的引用都被清除掉后才会被执行。python中的解构器是在实例释放前提供特殊处理功能方法,它们通

  • 我正在寻找一种方法来找出用jQuery选择了哪个字段。我构建了一个函数,但它不起作用。 JS函数 在jsfiddle开放链接中测试

  • 问题内容: 为什么IDE会抱怨“在构造函数中泄漏”?我一直认为这只是一种不好的做法。但是我实际上从来没有发现为什么它不好。 问题答案: 在构造器(而不是控制器)中泄漏引用是危险的,尤其是在多线程环境中。这是因为在构造函数调用完成之前,对象尚未完全构造。因此,从构造函数中泄漏出来意味着外部世界可以访问尚未完全构建的对象。这可能不一定会导致单线程程序出现问题(尽管有可能,但是这种情况下的问题更加明显)

  • 参加以下课程: 由于Foo(std::stringbar_, intbaz_=7);是我唯一的构造函数,编译器不应该为我实现默认构造函数,对吗?我认为我可以构造这个类的唯一两种方法是: 然而,为什么这是可能的? 当唯一的公共构造函数要求其第一个参数具有值时,我不理解如何默认构造类。将默认构造函数设为私有或尝试C 11删除它,没有什么区别。这是怎么发生的 http://ideone.com/CL7I

  • 问题内容: 在Swift 2.2中,我经常使用类似于的简洁语法声明变量。这给出了类型,并使用对其进行了初始化。 (当然,在这些示例中,您可以使用任何类型) 但是,当我在Swift 3.0中执行相同操作时,出现错误: 。它还说。不知何故,我认为我所追求的不完全是。 当然,还有其他替代方法可以执行相同的操作,例如和,但是它们比我以前使用的方法更为冗长。在Swift 3.0中删除了构造函数,还是以我尚未

  • 问题内容: 我们正在构建一个电子商务应用程序。我们正在将JAVA堆栈与Hibernate和Spring框架一起使用。与所有电子商务应用程序一样,我们需要在我们的电子商务应用程序中构建搜索功能。 因此,我们遇到了Hibernate Search 和Apache Solr 。有人可以列出两者的优缺点,以便我们为Enterprise Search选择理想的解决方案吗? 问题答案: Apache Solr