在类的开头声明我的变量时,我不能在其他方法的条件语句中使用它们。 我尝试在它工作的方法中声明它们但我不能使用方法之外的变量。
这是我的代码示例
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;
}
}
答案 0 :(得分:11)
没有&#34;一个尺寸适合所有&#34;回答这里,因为声明变量有不同的原因。
静态变量(在类中直接声明,使用static
修饰符)是类范围的,而不是特定于单个实例。通常静态变量是final
- 可变的全局状态是一个棘手的业务。
实例变量(直接在类中声明)用于记录对象的状态。它们将在每个实例方法中可用。
(实例和静态变量都是字段。)
局部变量(在构造函数或方法中声明)仅在该方法中可用,并且是有效的&#34;临时的&#34;仅对该单个方法调用所需的数据。 (如果以递归方式调用该方法,则每个调用都会获得自己独立的变量集。)
因此,对于每个变量,请考虑它是否在逻辑上是对象状态的一部分,并在适当的位置声明它。一旦你确定了它是什么类型的变量,你就可以确定物理位置。对于字段,在文件的顶部,中间或底部,(确切地)确切地说明它的位置并不重要。字段之间的排序在初始化方面很重要,但在使用它的方法之前或之后是否重要。一般来说,在一个一致的地方宣布你所有的领域通常是一个好主意 - 我个人经常这样做:
class Foo
{
// Static variables
// Instance variables
// Constructors
// Methods
// Nested types
}
......但那只是一个惯例。
对于局部变量,在尽可能小的范围内尽可能晚地声明它们通常是个好主意。所以而不是:
int i;
int x;
for (i = 0; i < 10; i++) {
x = i * i;
System.out.println(x);
}
这是可取的:
for (int i = 0; i < 10; i++) {
int x = i * i;
System.out.println(x);
}
通过限制变量的范围,通常更容易推理它。
答案 1 :(得分:5)
您需要声明变量
在Java语法允许声明的位置,
在适合预期生命周期的地方......无论是什么。
因此,在您的示例中,您不能在此时声明counter
,因为switch
语句的语法不允许它。但是可以将它放在switch
语句之前。或者在方法之前,或之后。
接下来你需要问问自己counter
应该花多长时间&#34;生活&#34;。如果假设它只在onClick
运行时生存,那么它需要在onClick
方法中声明。但是如果它的目的只是对象的实例......那么它应该是一个实例变量......并在类的顶部声明。
等等......
简而言之,正确的答案取决于你要做的事情......
(在这种情况下,如果counter
应该计算点击次数...&#34;这个东西&#34; ...它可能应该是一个实例变量。它也可能是一个静态变量,模数可能是一个糟糕的设计选择的问题,并且由于其他原因它可能是不正确的。局部变量肯定是不正确的,作为点击计数器。)
答案 2 :(得分:-2)
您可以全局声明它,以便随时随地访问它。要声明它全局声明它在外面。
要定义全局变量,您可以使用静态关键字
public class Global {
public static int a;
public static int b;
}
现在您可以通过调用
从任意位置访问a和bGlobal.a;
Global.b;
如果您不知道如何声明全局变量
,则可能需要Google