Java 为什么MediaPlayer API应该声明为全局实例变量?
在上面的代码中,我在Java 为什么MediaPlayer API应该声明为全局实例变量?,java,android,Java,Android,在上面的代码中,我在onCreate方法中初始化了一个新的MediaPlayer对象。当我想使用MediaPlayer对象media调用start()方法时,它要求我将对象声明为final。但是,如果我将MediaPlayer对象初始化为类MainActivity的实例变量,则不会出现任何错误。当onCreate方法将MediaPlayer对象声明为局部变量时,为什么要求我将其作为final对象?局部类可以非常明确地引用实例变量。它们无法引用非最终局部变量的原因是,在方法返回后,局部类实例可以保
onCreate
方法中初始化了一个新的MediaPlayer
对象。当我想使用MediaPlayer
对象media
调用start()
方法时,它要求我将对象声明为final。但是,如果我将MediaPlayer
对象初始化为类MainActivity
的实例变量,则不会出现任何错误。当onCreate
方法将MediaPlayer
对象声明为局部变量时,为什么要求我将其作为final
对象?局部类可以非常明确地引用实例变量。它们无法引用非最终局部变量的原因是,在方法返回后,局部类实例可以保留在内存中。当方法返回时,局部变量超出范围,因此需要它们的副本。如果变量不是final,那么方法中变量的副本可能会更改,而本地类中的副本不会更改,因此它们将不同步。
“Java中的匿名类和最终变量”
这应该会有所帮助
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button play = (Button)findViewById(R.id.playButton);
MediaPlayer mediaN = MediaPlayer.create(this, R.raw.master6);
play.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
mediaN.start();
}
});
}
}