public void onClick(View v) {
switch (v.getId()) {
case R.id.start:
{
Intent intent = new Intent();
intent.setClass(this, Menu.class);
startActivity(intent);
}
break;
case R.id.records:
Intent intent = new Intent();
intent.setClass(this, RecordList.class);
startActivity(intent);
break;
}
}
在第一个按钮的处理中有花括号,我想了解它们在这种情况下是如何工作的。intent如果将它们删除,那么即使有操作员,也会抱怨两个相同的名称break。如果我突然编写这样的代码,第一个按钮将不遵循创建的意图,而我将能够单击第二个按钮,那么就会发生一些不好的事情。
{ ... }在这种情况下,它只是一个(匿名)代码块。显然,这样做只是为了不存在变量名冲突。该答案指出,使用此类块通常是代码编写不佳的标志。当然,该声明可以被认为是有争议的,但在这种特殊情况下,
Intent-a 的创建以及方法调用setClass和startActivity可以从switch-a 中取出,case仅在 -s 中留下类的选择:一对花括号定义了代码块
{...}的边界。在 Java 中,变量可以在任何块中声明。该块定义变量的范围(可见性)。在您的示例中,三个变量范围(如果计算类字段,甚至是 4 个)相互嵌套。在这种情况下,在作用域 1 中声明的变量可以从作用域 2 和 3 访问,在作用域 2 中声明的变量将在作用域 3 中可用,但在作用域 1 中不可用。但是,来自作用域 3 的变量不能在该作用域之外访问。例如下面的代码在注释掉第 22 行之前不会编译,因为这个地方的变量不再可用
错误
另一个有趣的点是,在 Java 中,您不能用代码块“隐藏/重叠”变量。以下代码将无法编译(错误:变量 s2 已在方法 method() 中定义)
但你可以这样做