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

为什么不使用new关键字就可以实例化Toast?

彭硕
2023-03-14
问题内容

因此,对于Toast类,显然可以这样编写:

Toast toastMessage = Toast.makeText(this, "Hello", Toast.LENGTH_SHORT)
toastMessage.show();

为什么完全可以实例化toastMessage并将其用作没有new关键字的对象?

如何通过方法实例化toastMessage?


问题答案:

这里没有什么特别的Toast。您只是在调用创建实例的静态方法(或者可以重用现有实例-
这是实现细节)。例如,这是您会在各处看到的一种模式Calendar.getInstance()。有时可以改为调用构造函数,有时 只能
通过静态方法创建实例。

除非幕后功夫,否则在实现的 某个地方 很可能会调用构造函数。这是一个简单的例子:

public final class CreateViaMethod {
    private final String name;

    private CreateViaMethod(String name) {
        this.name = name;
    }

    public static CreateViaMethod newInstance(String name) {
        return new CreateViaMethod(name);
    }
}

API设计人员 可能 要这样做的原因有多种。例如,可能有几种具有相同参数类型但名称不同的“创建”方法,例如

public static Duration fromSeconds(int seconds)
public static Duration fromMinutes(int minutes)
public static Duration fromHours(int hours)

…那里不能有三个重载的构造函数,但是可以给 方法指定 不同的名称。



 类似资料:
  • 问题内容: 我正在网上关注Java教程,尝试学习该语言,并且它在使用数组的两种语义之间反弹。 和: 该教程从未真正提到过为什么它会在两者之间来回切换,所以我对该主题进行了一些搜索。我目前的理解是,操作员正在创建“ longs数组”类型的对象。我 不 明白的是为什么我要那个,那有什么后果? 是否存在某些特定于“数组”的方法,除非它是“数组对象”,否则这些方法对数组不起作用? 有什么我 不能 用普通数

  • 我没有在我的中设置,但是我可以使用和! 我的如下所示: 如果我想安装其他版本的JDK,比如11、14、15.…,我该如何使用它呢?我需要设置吗?

  • 问题内容: 在JavaScript中的关键字可能会相当混乱首次遇到它的时候,人们往往会认为JavaScript是不是面向对象的编程语言。 它是什么? 它解决什么问题? 什么时候合适,什么时候不合适? 问题答案: 它做五件事: 它创建一个新对象。这个对象的类型就是 object 。 它将这个新对象的内部不可访问的 [[prototype]] (即 proto )属性设置为构造函数的外部可访问 原型

  • 问题内容: 看这两个简单的程序: 程序1: 程式2: 我想知道在Program-1 的最后一行和Program-2 的最后一行之间是否有区别?(任何区别!) 问题答案: 在第二个程序中,are不是数组定界符,它们是块定界符;在这种情况下,它们用于提供所谓的初始化块,该初始化块在实例化类的新实例时执行。 创建初始化数组的“正确”方法是: 在初始化引用,使用现有引用或将数组传递给方法时,都可以始终使用

  • 问题内容: 以下代码是做什么的: 构造函数在哪里,我想用新函数扩展Widget的“类” 。 什么是 关键词在那里做,如果它被省略了,会发生什么? 问题答案: WeatherWidget.prototype = new Widget; 该关键字调用构造函数,返回值分配给属性。(如果省略,除非添加了参数列表,否则将不会调用。但是,以这种方式调用可能是不可能的。如果它不是严格的模式代码并且实现是,则肯定

  • 问题内容: 为什么在Java中不使用const关键字? 您能看到在Java语法中使用某些可传递const或不可变关键字的任何缺点,还是为什么选择了常见的繁琐方法? 您能看到关闭请求的 原因 ,Sun提供了任何解释吗? 问题答案: 您能看到关闭请求的原因吗,Sun是否提供任何解释? 是。Sun在请求本身中提供了三个为什么不对请求执行操作的原因。我引用: “目前尚无计划将此功能添加到Java中。除了蔓