方法中的匿名内部类要访问方法的局部变量的话,这个变量必须被final修饰
如果不修饰的话创建匿名对象的时候可能局部变量的生命周期已经结束了
但是加了final之后我想知道这个局部变量的生命周期变成什么样了
还有这个局部变量存在内存中的什么位置
是栈?堆还是方法区
public class MainActivity extends Activity {
private EditText one, two;//把它定义在onCreate()方法中就会报错
private Button sum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
(EditText 加入定义在这里) one = (EditText) this.findViewById(R.id.one);
(EditText) two = (EditText) this.findViewById(R.id.two);
sum = (Button) this.findViewById(R.id.sum);
sum.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SumActivity.class);
String strOne = one.getText().toString();
String strTwo = two.getText().toString();
intent.putExtra("one", strOne);
intent.putExtra("two", strTwo);
MainActivity.this.startActivity(intent);
}
});
}
内部类引用外部的变量,必须声明为final
不然会引发并发安全问题
你想啊,你那个回调事件不是立即执行,是以后某个时刻才执行。如果不定义成final,某个时刻我把ExitText那个变量置为null,你哪个回调岂不是报错了
这个解释还是合理。
局部变量的生命周期跟原来应该还是一样的,随着方法体的结束在栈帧中被销毁。匿名内部类访问的是局部变量的拷贝,也可以认为是局部变量的副本。