实例化对象

时间:2016-05-30 08:49:54

标签: java android

在java中,我了解到我使用new关键字来实例化一个对象,例如

 Employee e = new Employee();

在android中,通过浏览开发者页面,实例化上下文对象,而不使用像这样的新关键字:

Context myContext = getApplicationContext();

这是为什么?我应该认为应该使用像这样的新关键字以相同的方式创建上下文对象:

Context myContext = new Context();

我认为有人可能会回答说 getApplicationContext()方法会返回类型为context的对象,因此会返回上面的语法,但有人会更深入地解释为什么要这样做而不是只是 这样做

Context myContext = new Context();

3 个答案:

答案 0 :(得分:2)

来自文档:

  

返回单个全局Application对象的上下文   当前的过程。

因此,当您启动应用程序时,系统会为其分配一个进程。执行Context c = new Context()将无法获得该过程的实例。

答案 1 :(得分:2)

docs中所述:

  

有关应用程序环境的全局信息的接口。这是一个抽象类,其实现由Android系统提供。它允许访问特定于应用程序的资源和类,以及应用程序级操作的上调,例如启动活动,广播和接收意图等。

因此,通过使用getApplicationContext(),您将调用包含特定于应用程序的资源的上下文对象。

创建一个新的Context类型对象是没有意义的,因为它不包含有关应用程序环境的信息。

答案 2 :(得分:2)

因为有时候你根本不想/每次都需要创建一个新实例,有时候你只想获取对象而不自己实际处理它的创建。

例如,有一个Singleton design pattern,在其通用实现中,由于构造函数是私有的,因此无法使用new关键字创建新实例。所以剩下要做的是通过调用静态方法来获取类的实例:

public class MySingleton {
    private MySingleton() { }

    public static MySingleton getInstance() { ... }
}

有时您可能希望使用Factory method pattern来处理新对象创建/实例化:您调用单个方法,并为您返回新的或现有的对象,而无需显式调用构造函数。

对于Context,您不需要创建此对象,因为系统会为您处理它并且该过程是透明的。您只需要调用一个方法即可获得实例。