use*_*961 5 java android scope
在类的开头声明我的变量时,我不能在其他方法的条件语句中使用它们.我尝试在它工作的方法中声明它们但我不能使用方法之外的变量.
这是我的代码示例
protected void onClick(View v){
switch(v.getId()){
int counter;
case R.id.btsend:
for (int i = 0;i<=0;i++){
if (true)
counter += 1;
}
TextView.setText(counter);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
这里没有"一刀切"的答案,因为声明变量有不同的原因.
静态变量(在类中直接使用static修饰符声明)是类范围的,而不是特定于单个实例.通常静态变量是final- 可变的全局状态是一个棘手的业务.
实例变量(直接在类中声明)用于记录对象的状态.它们将在每个实例方法中可用.
(实例和静态变量都是字段.)
局部变量(在构造函数或方法中声明)仅在该方法中可用,并且实际上是"临时"数据,仅对该单个方法调用是必需的.(如果以递归方式调用该方法,则每个调用都会获得自己独立的变量集.)
因此,对于每个变量,请考虑它是否在逻辑上是对象状态的一部分,并在适当的位置声明它.一旦你确定了它是什么类型的变量,你就可以确定物理位置.对于字段,在文件顶部,中间或底部(确切地说)确切位置无关紧要.字段之间的排序在初始化方面很重要,但无论是在使用它的方法之前还是之后都无关紧要.一般来说,将所有字段声明在一个一致的位置通常是个好主意 - 我个人经常这样做:
class Foo
{
// Static variables
// Instance variables
// Constructors
// Methods
// Nested types
}
Run Code Online (Sandbox Code Playgroud)
......但这只是一个惯例.
对于局部变量,在尽可能小的范围内尽可能晚地声明它们通常是个好主意.所以代替:
int i;
int x;
for (i = 0; i < 10; i++) {
x = i * i;
System.out.println(x);
}
Run Code Online (Sandbox Code Playgroud)
这可能是首选:
for (int i = 0; i < 10; i++) {
int x = i * i;
System.out.println(x);
}
Run Code Online (Sandbox Code Playgroud)
通过限制变量的范围,通常更容易推理它.
你需要声明变量
在Java语法允许声明的地方,和
在一个适合...... 的预期寿命的地方.
因此,在您的示例中,您无法counter在此处声明,因为switch语句的语法不允许它.但你可以把它放在switch声明之前.或者在方法之前,或之后.
接下来你需要问自己counter应该"活" 多久.如果假设它只在onClick运行时生存,那么它需要在onClick方法内声明.但是如果它只是为了对象的实例而存活......那么它应该是一个实例变量......并在类的顶部声明.
等等 ...
简而言之,正确的答案取决于你想要做什么......
(在这种情况下,如果counter应该计算点击次数..."这件事"......它可能应该是一个实例变量.它也可能是一个静态变量,模数可能是一个糟糕的设计选择,并且由于其他原因可能是不正确的.局部变量肯定是不正确的,作为点击计数器.)
Dak*_*hah -2
您可以在全球范围内声明它,以便在任何您想要的地方访问它。要在全局范围内声明它,请在外部声明它。
要定义全局变量,您可以使用 static 关键字
public class Global {
public static int a;
public static int b;
}
Run Code Online (Sandbox Code Playgroud)
现在您可以通过调用从任何地方访问 a 和 b
Global.a;
Global.b;
Run Code Online (Sandbox Code Playgroud)
如果你不知道如何声明全局变量,你可能需要谷歌一下
| 归档时间: |
|
| 查看次数: |
1204 次 |
| 最近记录: |