我是Java和Android编程的新手。我得到了这段代码的错误:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tView=(TextView) findViewById(R.id.txt);
Button btn=(Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
tView.setText("Blah Blah");
}
});
但是当我宣布参考类型" tView"在onCreate()方法之外,只是错误就消失了,那么代码将是这样的:
public class MainActivity extends ActionBarActivity {
TextView tView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tView=(TextView) findViewById(R.id.txt);
Button btn=(Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
tView.setText("Blah Blah");
}
});
那么当我宣布参考类型" tview&#34时,区别是什么?在方法onCreate()内部吗?
答案 0 :(得分:0)
这与变量的范围有关。在方法内定义变量时,变量范围仅在该方法内。创建onClickListener
时,您将创建一个匿名内部类。这意味着你必须这样做才能使代码工作:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView tView=(TextView) findViewById(R.id.txt);
Button btn=(Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
tView.setText("Blah Blah");
}
});
这可以防止tView
变量发生变化。
当您以另一种方式编码时,范围会更改,并且整个类都会看到变量,而不仅仅是方法。
答案 1 :(得分:-1)
我搜索了一下,我得到的是当我们在内部类中使用非最终局部变量时,当内部类尝试更改不存在的局部变量时,可能会导致一些意外和奇怪的问题方法结束后。