我正在查看Android开发的一些教程,我看到了下面的案例
MediaPlayer mp = MediaPlayer.create(this, R.id.song)
我的问题如下:为什么在创建新的MediaPlayer对象时没有涉及“新”关键字?我认为只要你创建一个类
的实例,就必须使用new那我该怎么办
MediaPlayer mp = new MediaPlayer();
mp.create(this, R.id.song);
这是错的吗?
答案 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()来准备它。你的所有人都准备好使用静态帮手。