我应该在哪里声明我的变量?

时间:2014-04-11 08:21:19

标签: 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;
  }
}

3 个答案:

答案 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和b
Global.a;

Global.b;

如果您不知道如何声明全局变量

,则可能需要Google