這裏沒有靜物。你有一個匿名內部類的實例(View.OnClickListener
),但沒有靜態對象。
編輯:我想知道你是否會混淆static
變量與local (non-member) final
variables。 這與靜態變量沒有任何直接關係,但我可以看到(自我描述的)新手如何讓他們感到困惑。
任何局部變量,使用形式化方法 參數或異常處理 參數,但沒有宣佈在 內部類必須聲明final
, 而且必須在內部類的身體之前,明確賦值 。
修改你的榜樣,下面是這不允許的情況下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
int i = 0; // This is non-final; access to it from an inner class is not allowed.
button = (Button) findViewById(R.id.Button01);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
i = 10; // Compiler error
}
});
}
這裏還有另一種是不允許:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final int i = 0; // This is final; read-only access to it from an inner class is allowed.
button = (Button) findViewById(R.id.Button01);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
i = 10; // Compiler error -- can't modify a final variable.
}
});
}
但這是允許:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final int i = 0; // This is final; read-only access to it from an inner class is allowed.
button = (Button) findViewById(R.id.Button01);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int j = i; // OK
}
});
}
什麼讓你覺得這是一個靜態對象? - 編輯:道歉,如果這從snippy脫落。我真的要求澄清。你認爲什麼是靜態的,你爲什麼這麼想? – rfeak 2011-01-24 16:43:48