Java 何时创建android类的新实例?

Java 何时创建android类的新实例?,java,android,Java,Android,因此,我首先潜入Android开发,并想用蓝牙API做一些事情。让我困惑的是,在我看到的每个例子中,你们不需要创建一个新的蓝牙适配器实例,你们可以这样调用它 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 我不明白为什么没有人做这种事: BluetoothAdapter mBluetoothAdapter = new BluetoothAdapter(); myBluetoothAdapter = mBluetoothAd

因此,我首先潜入Android开发,并想用蓝牙API做一些事情。让我困惑的是,在我看到的每个例子中,你们不需要创建一个新的蓝牙适配器实例,你们可以这样调用它

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
我不明白为什么没有人做这种事:

BluetoothAdapter mBluetoothAdapter = new BluetoothAdapter(); 
myBluetoothAdapter = mBluetoothAdapter.getDefaultAdapter(); 

这让我对我必须创建新实例的类和不创建的对象感到困惑

BluetoothAdapter类可能是一个单例类,因此您可以通过调用静态方法getDefaultAdapter()来获取实例,该方法将为您返回一个实例

并且不能实例化静态类


看看这个wikipedia页面:

BluetoothAdapter类可能是一个单例类,因此您可以通过调用静态方法getDefaultAdapter()来获取实例,该方法将为您返回一个实例

并且不能实例化静态类


看看这个wikipedia页面:

如果你要从工厂获取一个对象,你为什么要初始化一个对象呢?实际上,您创建了两个对象,然后扔掉了第一个对象。因此,如果类有工厂方法,只需跳过对象初始化行。
是的,知道类是否有工厂方法的唯一方法是查看文档并边走边学习。

如果要从工厂获取对象,为什么要初始化对象?实际上,您创建了两个对象,然后扔掉了第一个对象。因此,如果类有工厂方法,只需跳过对象初始化行。
是的,知道一个类是否有工厂方法的唯一方法是查看文档并边走边学习。

这是一种单例设计模式。当您只需要该类的一个实例时,可以使用此模式。您不需要BluetoothAdapter的多个实例。当您必须在实例之间共享资源时,通常希望使用单例,例如,您可能希望在多个对象上使用类。如何在java中实现这一点是通过一个静态字段实现的,如下所示:

 class BluetoothAdapter{

    private static adapter = null;

    private BluetoothAdapter(){

    }

    public static getDefaultAdapter(){
        if (adapter == null){
            adapter = new BluetoothAdapter();
        }
        return adapter;
    }
}

首先,这允许您在同一时间只有这个对象的一个实例。此外,它仅在您实际需要时创建对象。如果从不调用getDefaultAdapter(),则将永远不会创建适配器

这是一种单例设计模式。当您只需要该类的一个实例时,可以使用此模式。您不需要BluetoothAdapter的多个实例。当您必须在实例之间共享资源时,通常希望使用单例,例如,您可能希望在多个对象上使用类。如何在java中实现这一点是通过一个静态字段实现的,如下所示:

 class BluetoothAdapter{

    private static adapter = null;

    private BluetoothAdapter(){

    }

    public static getDefaultAdapter(){
        if (adapter == null){
            adapter = new BluetoothAdapter();
        }
        return adapter;
    }
}

首先,这允许您在同一时间只有这个对象的一个实例。此外,它仅在您实际需要时创建对象。如果从不调用getDefaultAdapter(),则将永远不会创建适配器

这是一个实际返回BluetoothAdapter实例的工厂方法。请参阅源代码:@ZouZou,当我使用其他android类时..我如何知道它们是否有工厂方法?您知道静态方法和非静态方法之间的区别吗?您应该做的第一件事是阅读您正在使用的类的文档。“要获取表示本地蓝牙适配器的BluetoothAdapter,在JELLY_BEAN_MR1及以下版本上运行时,请调用静态getDefaultAdapter()方法;[…]”njzk2-yes@这是一个实际返回BluetoothAdapter实例的工厂方法。请参阅源代码:@ZouZou,当我使用其他android类时..我如何知道它们是否有工厂方法?您知道静态方法和非静态方法之间的区别吗?您应该做的第一件事是阅读您正在使用的类的文档。“要获取表示本地蓝牙适配器的BluetoothAdapter,在JELLY_BEAN_MR1及以下版本上运行时,请调用静态getDefaultAdapter()方法;[…]”njzk2-yes@邹作平。