为什么MediaPlayer类没有使用new关键字进行实例化

时间:2012-08-03 14:10:01

标签: java android

我正在查看Android开发的一些教程,我看到了下面的案例

MediaPlayer mp = MediaPlayer.create(this, R.id.song)

我的问题如下:为什么在创建新的MediaPlayer对象时没有涉及“新”关键字?我认为只要你创建一个类

的实例,就必须使用new

那我该怎么办

MediaPlayer mp = new MediaPlayer(); 
mp.create(this, R.id.song);

这是错的吗?

3 个答案:

答案 0 :(得分:3)

  

我的问题如下:为什么在创建新的MediaPlayer对象时没有涉及“new”关键字?

你正在调用一个静态方法,它会(可能)创建一个新实例。

也许该方法直接调用构造函数 - 或者它可能会创建某个子类的实例。或者它可能会返回对现有实例的引用。

这是关于工厂方法的好处 - 他们可以隐藏它们的实现细节:)

答案 1 :(得分:0)

这是一个“工厂”功能。在内部,它调用new MediaPlayer(),你只是不在课堂外看到它。

答案 2 :(得分:0)

您实际上可以在MediaPlayer上调用 new

以下摘自http://developer.android.com/reference/android/media/MediaPlayer.html

  

当使用new创建MediaPlayer对象或者在调用reset()之后,它处于空闲状态[...]此外,使用new创建的MediaPlayer对象处于空闲状态,而使用new创建的MediaPlayer对象处于空闲状态重载的方便创建方法不处于空闲状态。实际上,如果使用create方法创建成功,则对象处于Prepared状态。

基本上使用new和static方法只会改变你的MediaPlayer所处的状态。如果你是新的,那么你必须用setDataSource()初始化它并用onPrepare()来准备它。你的所有人都准备好使用静态帮手。