【发布时间】:2020-08-18 06:16:39
【问题描述】:
在这种情况下,我试图理解实例变量范围背后的逻辑:
public class DiceActivity extends AppCompatActivity implements View.OnClickListener {
private TextView textResult;
private int max;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dice);
int max = getIntent().getIntExtra("max", 0);
TextView textTitle = (TextView) findViewById(R.id.textTitle);
textTitle.setText(max+" sided dice");
textResult = ((TextView) findViewById(R.id.textResult));
textResult.setText("");
Button buttonRoll = (Button) findViewById(R.id.buttonRoll);
buttonRoll.setOnClickListener(this);
}
@Override
public void onClick(View v) {
SecureRandom random = new SecureRandom();
int result = random.nextInt(max) + 1;
textResult.setText(String.valueOf(result));
}
}
实例变量“max”未链接到 onCreate 方法中的“max”(max 返回 0,除非我声明 max2=max 以获得正确的结果)但不知何故 textResult 运行良好,不需要声明另一个变量来获取结果。
【问题讨论】:
-
当您在 onCreate 中声明
int max时,您创建了一个新变量。它被称为“阴影”。这两个变量都存在并且具有相同的名称,但只有最内层范围的变量是可访问的。如果只想访问外层,可以this.max,或者干脆不重新声明。
标签: java android variables methods scope