2010-08-10 167 views
2

我知道这有点愚蠢,但你怎么做到这一点?我有“RTFM”,但我仍然不明白这样的概念就不存在于我习惯编程的语言中。无论如何,我的问题很简单:如何正确设置一个全局变量,该类中的所有公共无效函数都可以使用它?如何声明变量

下面是一些示例代码,我将突出的情况下,冗余你没有看到它:

public class baketimer extends Activity implements OnClickListener { 
    /** Called when the activity is first created. */ 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final Button cupcake1 = (Button) this.findViewById(R.id.cupcake1); 

     cupcake1.setOnClickListener(this);   
    } 

    public void onClick(View v) { 
     switch(v.getId()){ 
     case R.id.cupcake1: 
      final Button cupcake1 = (Button) this.findViewById(R.id.cupcake1); 
      new CountDownTimer(30000, 1000) { 

       public void onTick(long millisUntilFinished) { 
        cupcake1.setText("" + millisUntilFinished/1000); 
       } 

       public void onFinish() { 
        cupcake1.setText("Done!"); 
       } 
      }.start(); 
      Toast.makeText(this, "Mmm cupcakes!", Toast.LENGTH_SHORT).show(); 
      break;

我怎么会去有关声明cupcake1整个类?

在此先感谢!

+1

一个建议,尽量使问题更有意义(例如:如何在Java中声明一个全局变量?)让其他人同样的问题可以找到这个更容易通过搜索或浏览 – 2010-08-10 03:43:29

+0

+1将蛋糕加入您的代码!对不起,我只是饿了。 “RTFM”代表什么? – 2013-01-27 19:36:26

回答

1

声明类内部和外部的任何函数的变量,但不一定是静态的。

public class YourClass{ 
    Button cupcake = null; 
    public void onCreate(Bundle savedInstanceState) { 
     ... 
     cupcake = (Button) this.findViewById(R.id.cupcake1); 
     ... 
    } 
    public void onClick(Bundle savedInstanceState) { 
     ... 
    } 
} 

使用静态(static Button cupcake = ...),如果你希望变量在你的程序中的所有对象共享。否则,请勿使用静态,以便该变量仅属于该对象。

+0

嗯,这正是显而易见的事情,我也尝试过。现在我很难过,因为当我这样做的时候会产生一个错误。我一定错过了一个分号,哈哈! @双方的答案,谢谢你帮助这样一个新问题! – AutoM8R 2010-08-10 03:27:15

+0

好的。我也不介意你是否赞成或接受:D – 2010-08-10 03:29:32

+0

谢谢,请你解释一下如何设置按钮,例如完成上述示例所需的代码? 我经常使用findViewById,但我怀疑是因为setContentView不被调用,直到onCreate()我不能声明按钮使用findViewById没有它抛出一个力量关闭,我是吗? 干杯! – AutoM8R 2010-08-10 03:34:33

1

整个类的,你把它定义为static类内,但任何功能之外,诸如:

public class testprog { 
    static int xyz = 0; 
    public static void main(String args[]) { 
    } 
} 

但要确保这就是你想要的。 单个变量将在您的类的全部实例中共享,如果您使用线程,则可能必须同步对其的访问。如果你想让你的类中的所有功能都可用,但每个实例仍然有一个,请不要使用静态。

+0

非常感谢您的洞察 – AutoM8R 2010-08-10 03:27:31

+0

我想upvote,但我太新的网站:( – AutoM8R 2010-08-10 03:35:20

+0

有雅去,@ AutoM8R,这里是一个问题upvote带你到15代表,现在你可以upvote到你的心脏内容:-) – paxdiablo 2010-08-10 04:46:59

1

首先我们需要清楚“全局变量”的含义。

  • Java有static变量由一个类的所有实例共享。
  • Java的实例变量属于一个类的单个实例。
  • Java有一些方法(或代码块)正在执行时存在的局部变量和参数。
  • Java在C/C++的意义上没有全局变量。

话虽如此,这里有一个简单的例子,声明一个静态和一个实例变量。

public Foo { 
    private static int fooCounter; 
    private int nosLegs; 

    public Foo (int n) { 
     nosLegs = n; 
     fooCounter++; 
    } 

    /* There is only one counter of Foo instances created */ 
    public static int getFooCount() { 
     return fooCounter; 
    } 

    /* Each Foo can have a different number of legs */ 
    public int getNosLegs() { 
     return nosLegs; 
    } 
} 
+0

非常棒的例子,感谢所有的支持! – AutoM8R 2010-08-10 03:38:04

+0

我真的不确定谁有最好的答案,他们都描绘出伟大的角度!我很想投票赞成,但我还没有要求的代表。 – AutoM8R 2010-08-10 03:41:08